1! { dg-do compile } 2! { dg-options "-std=f2008" } 3! 4! Check relaxed TS29113 constraints for procedures 5! and c_f_*pointer argument checking for c_ptr/c_funptr. 6! 7 8use iso_c_binding 9implicit none 10type(c_ptr) :: cp 11type(c_funptr) :: cfp 12 13interface 14 subroutine sub() bind(C) 15 end subroutine sub 16end interface 17integer(c_int), pointer :: int 18procedure(sub), pointer :: fsub 19 20integer, external :: noCsub 21procedure(integer), pointer :: fint 22 23cp = c_funloc (sub) ! { dg-error "Can't convert TYPE.c_funptr. to TYPE.c_ptr." }) 24cfp = c_loc (int) ! { dg-error "Can't convert TYPE.c_ptr. to TYPE.c_funptr." } 25 26call c_f_pointer (cfp, int) ! { dg-error "Argument CPTR at .1. to C_F_POINTER shall have the type TYPE.C_PTR." } 27call c_f_procpointer (cp, fsub) ! { dg-error "Argument CPTR at .1. to C_F_PROCPOINTER shall have the type TYPE.C_FUNPTR." } 28 29cfp = c_funloc (noCsub) ! { dg-error "TS 29113/TS 18508: Noninteroperable procedure at .1. to C_FUNLOC" } 30call c_f_procpointer (cfp, fint) ! { dg-error "TS 29113/TS 18508: Noninteroperable procedure pointer at .1. to C_F_PROCPOINTER" } 31end 32