I write a Fortran code like the one shown below.
module optional_arg
contains
subroutine foobar(opt_arg)
integer, intent(in), optional :: opt_arg
!$omp parallel default(none) shared(opt_arg)
if (present(opt_arg)) then
end if
!$omp end parallel
end subroutine foobar
end module optional_arg
The module has a function foobar()
with an optional formal argument opt_arg
. The subroutine contains an OpenMP-block. I need to list that optional argument in a shared()
clause.
Is that safe to do so?
I was unable to find the answer in the official OpenMP 4.0 specifications. I am worried, because in a regular Fortran code it is not allowed to reference an optional variable unless it is actually present.
Upd. Compilers do not complain:
GNU Fortran (GCC) 4.10.0 20140718 (experimental):
gfortran -Wall -Wextra -fopenmp -c optional_arg.F90
NAG Fortran Compiler Release 6.0(Hibiya) Build 1042:
nagfor -openmp -c optional_arg.F90