1238722Skargl! { dg-do run } 2251315Skargl! { dg-additional-sources bind_c_usage_24_c.c } 3238722Skargl! 4238722Skargl! PR fortran/48858 5238722Skargl! PR fortran/48820 6238722Skargl! 7238722Skargl! TS 29113: BIND(C) with OPTIONAL 8238722Skargl! 9238722Skarglmodule m 10238722Skargl use iso_c_binding 11238722Skargl interface 12238722Skargl subroutine c_proc (is_present, var) bind(C) 13238722Skargl import 14238722Skargl logical(c_bool), value :: is_present 15238722Skargl integer(c_int), optional :: var 16238722Skargl end subroutine 17238722Skargl end interface 18238722Skarglcontains 19238722Skargl subroutine subtest (is_present, var) bind(C) 20238722Skargl logical(c_bool), intent(in), value :: is_present 21238722Skargl integer(c_int), intent(inout), optional :: var 22238722Skargl if (is_present) then 23238722Skargl if (.not. present (var)) call abort () 24238722Skargl if (var /= 43) call abort () 25251337Skargl var = -45 26251337Skargl else 27238722Skargl if (present (var)) call abort () 28238722Skargl end if 29238722Skargl end subroutine subtest 30238722Skarglend module m 31238722Skargl 32240864Skarglprogram test 33240864Skargl use m 34240864Skargl implicit none 35240864Skargl integer :: val 36238722Skargl 37238722Skargl val = 4 38238783Skargl call c_proc (.false._c_bool) 39238722Skargl call c_proc (.true._c_bool, val) 40238722Skargl if (val /= 7) call abort () 41238722Skarglend program test 42240864Skargl