! { dg-do compile } ! ! PR39630: Fortran 2003: Procedure pointer components. ! ! Probing some error messages. ! ! Contributed by Janus Weil 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