1! { dg-do compile } 2! { dg-options "-O2 -fdump-tree-original" } 3! 4! PR fortran/32600 c_f_pointer w/o shape 5! PR fortran/32580 c_f_procpointer 6! 7! Verify that c_f_prointer [w/o shape] and c_f_procpointer generate 8! the right code - and no library call 9 10program test 11 use iso_c_binding 12 implicit none 13 type(c_ptr) :: cptr 14 type(c_funptr) :: cfunptr 15 integer(4), pointer :: fptr 16 integer(4), pointer :: fptr_array(:) 17 procedure(integer(4)), pointer :: fprocptr 18 19 call c_f_pointer(cptr, fptr) 20 call c_f_pointer(cptr, fptr_array, [ 1 ]) 21 call c_f_procpointer(cfunptr, fprocptr) 22end program test 23 24! Make sure there is no function call: 25! { dg-final { scan-tree-dump-times "c_f" 0 "original" } } 26! { dg-final { scan-tree-dump-times "c_f_pointer" 0 "original" } } 27! { dg-final { scan-tree-dump-times "c_f_pointer_i4" 0 "original" } } 28! 29! Check scalar c_f_pointer 30! { dg-final { scan-tree-dump-times " fptr = .integer.kind=4. .. cptr" 1 "original" } } 31! 32! Array c_f_pointer: 33! 34! { dg-final { scan-tree-dump-times " fptr_array.data = cptr;" 1 "original" } } 35! { dg-final { scan-tree-dump-times " fptr_array.dim\\\[S..\\\].lbound = 1;" 1 "original" } } 36! { dg-final { scan-tree-dump-times " fptr_array.dim\\\[S..\\\].ubound = " 1 "original" } } 37! { dg-final { scan-tree-dump-times " fptr_array.dim\\\[S..\\\].stride = " 1 "original" } } 38! 39! Check c_f_procpointer 40! { dg-final { scan-tree-dump-times " fprocptr = .integer.kind=4. .\\*<.*>. ... cfunptr;" 1 "original" } } 41! 42