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