2 ! PR fortran/61615 - resolve correct generic with TYPE(C_PTR) arguments
3 ! PR fortran/99982 - dto. with C_PTR and C_FUNPTR
4 ! Contributed by Jacob Abel and Scot Breitenfeld
7 USE iso_c_binding
, only
: c_ptr
, c_funptr
10 character(8) :: ctyp
= ""
12 MODULE PROCEDURE bar_s
13 MODULE PROCEDURE bar_a1d
14 MODULE PROCEDURE bar_a2d
15 MODULE PROCEDURE bar_fp
16 MODULE PROCEDURE bar_fp1
17 MODULE PROCEDURE bar_fpx
22 WRITE (0, *) 'in bar_s'
29 WRITE (0, *) 'in bar_a1d'
32 END SUBROUTINE bar_a1d
36 WRITE (0, *) 'in bar_a2d'
39 END SUBROUTINE bar_a2d
43 WRITE (0, *) 'in bar_fp'
49 TYPE(c_funptr
) :: a(:)
50 WRITE (0, *) 'in bar_fp1'
53 END SUBROUTINE bar_fp1
55 SUBROUTINE bar_fpx(a
, b
)
56 TYPE(c_funptr
) :: a(..)
58 WRITE (0, *) 'in bar_fpx'
61 END SUBROUTINE bar_fpx
64 PROGRAM cptr_array_vs_scalar_arg
66 USE iso_c_binding
, only
: c_ptr
, c_loc
, c_funptr
69 TYPE(c_ptr
) :: a
, b(1), c(1,1)
70 type(c_funptr
) :: fp
, fp1(1), fp2(1,1)
74 if (rank
/= 0 .or
. ctyp
/= "c_ptr") stop 1
76 if (rank
/= 1 .or
. ctyp
/= "c_ptr") stop 2
78 if (rank
/= 2 .or
. ctyp
/= "c_ptr") stop 3
82 if (rank
/= 0 .or
. ctyp
/= "c_ptr") stop 4
84 if (rank
/= 1 .or
. ctyp
/= "c_ptr") stop 5
88 if (rank
/= 0 .or
. ctyp
/= "c_funptr") stop 6
90 if (rank
/= 1 .or
. ctyp
/= "c_funptr") stop 7
94 if (rank
/= -1 .or
. ctyp
/= "c_funptr") stop 8
95 END PROGRAM cptr_array_vs_scalar_arg