! { dg-do run { target c99_runtime } } ! { dg-additional-sources ISO_Fortran_binding_12.c } ! ! Test the fix for PR90093. The additional source is the main program. ! ! Contributed by Reinhold Bader ! module mod_optional use, intrinsic :: iso_c_binding implicit none integer :: status = 0 contains subroutine foo_opt(this, that, sz, flag) bind(c) real(c_float), optional :: this(:) real(c_float), optional :: that(*) integer(c_int), optional :: sz integer(c_int), value :: flag if (flag == 0) then if (.not. present(this) .or. present(that) .or. present(sz)) then write(*,*) 'FAIL 1', present(this), present(that), present(sz) status = status + 1 end if else if (flag == 1) then if (present(this) .or. .not. present(that) .or. .not. present(sz)) then write(*,*) 'FAIL 2', present(this), present(that), present(sz) status = status + 1 end if if (sz /= 12) then write(*,*) 'FAIL 3' status = status + 1 end if else if (flag == 2) then if (present(this) .or. present(that) .or. present(sz)) then write(*,*) 'FAIL 4', present(this), present(that), present(sz) status = status + 1 end if end if end subroutine foo_opt subroutine write_res() BIND(C) ! Add a check that the fortran missing optional is accepted by the ! bind(C) procedure. call foo_opt (flag = 2) if (status == 0) then write(*,*) 'OK' else stop 1 end if end subroutine end module mod_optional