| ! { dg-do compile } |
| ! |
| ! PR39630: Fortran 2003: Procedure pointer components. |
| ! |
| ! Probing some error messages. |
| ! |
| ! Contributed by Janus Weil <janus@gcc.gnu.org> |
| |
| implicit none |
| |
| interface |
| subroutine sub |
| end subroutine |
| end interface |
| |
| external :: aaargh |
| |
| type :: t |
| procedure(), pointer, nopass :: ptr1 |
| procedure(real), pointer, nopass :: ptr2 |
| procedure(sub), pointer, nopass :: ptr3 |
| procedure(), pointer, nopass ptr4 ! { dg-error "Expected '::'" } |
| procedure(), pointer, nopass, pointer :: ptr5 ! { dg-error "Duplicate" } |
| procedure, pointer, nopass :: ptr6 ! { dg-error "Syntax error" } |
| procedure(), nopass :: ptr8 ! { dg-error "POINTER attribute is required" } |
| procedure(pp), pointer, nopass :: ptr9 ! { dg-error "declared in a later PROCEDURE statement" } |
| real :: y |
| end type t |
| |
| type :: t2 |
| procedure(aaargh), pointer, nopass :: ptr10 ! { dg-error "must be explicit" } |
| end type |
| |
| type,bind(c) :: bct ! { dg-error "BIND.C. derived type" } |
| procedure(), pointer,nopass :: ptr ! { dg-error "cannot be a member of|may not be C interoperable" } |
| end type bct |
| |
| procedure(sub), pointer :: pp |
| |
| type(t) :: x |
| |
| x%ptr2 => x ! { dg-error "Invalid procedure pointer assignment" } |
| |
| x => x%ptr2 ! { dg-error "Non-POINTER in pointer association context" } |
| |
| print *, x%ptr1() ! { dg-error "attribute conflicts with" } |
| call x%ptr2() ! { dg-error "attribute conflicts with" } |
| print *,x%ptr3() ! { dg-error "attribute conflicts with" } |
| |
| call x%y ! { dg-error "Expected type-bound procedure or procedure pointer component" } |
| |
| end |