| ! { dg-do compile } |
| ! |
| ! PR fortran/50612 |
| ! PR fortran/47023 |
| ! |
| subroutine test |
| use iso_c_binding |
| implicit none |
| external foo |
| procedure(), pointer :: pp |
| print *, c_sizeof(pp) ! { dg-error "Procedure unexpected as argument" } |
| print *, c_sizeof(foo) ! { dg-error "Procedure unexpected as argument" } |
| print *, c_sizeof(bar) ! { dg-error "Procedure unexpected as argument" } |
| contains |
| subroutine bar() |
| end subroutine bar |
| end |
| |
| integer function foo2() |
| procedure(), pointer :: ptr |
| ptr => foo2 ! { dg-error "Function result 'foo2' is invalid as proc-target in procedure pointer assignment" } |
| foo2 = 7 |
| block |
| ptr => foo2 ! { dg-error "Function result 'foo2' is invalid as proc-target in procedure pointer assignment" } |
| end block |
| contains |
| subroutine foo() |
| ptr => foo2 ! { dg-error "Function result 'foo2' is invalid as proc-target in procedure pointer assignment" } |
| end subroutine foo |
| end function foo2 |
| |
| module m2 |
| contains |
| integer function foo(i, fptr) bind(C) |
| use iso_c_binding |
| implicit none |
| integer :: i |
| type(c_funptr) :: fptr |
| fptr = c_funloc(foo) ! { dg-error "Function result 'foo' at .1. is invalid as X argument to C_FUNLOC" } |
| block |
| fptr = c_funloc(foo) ! { dg-error "Function result 'foo' at .1. is invalid as X argument to C_FUNLOC" } |
| end block |
| foo = 42*i |
| contains |
| subroutine bar() |
| fptr = c_funloc(foo) ! { dg-error "Function result 'foo' at .1. is invalid as X argument to C_FUNLOC" } |
| end subroutine bar |
| end function foo |
| end module m2 |