use ieee_exceptions
implicit none
integer, parameter :: n = 100
real :: nom(n)
integer :: denom(n)
logical :: saved_fpe_mode(size(ieee_all))
integer :: i
nom = 1
denom = 0
!$omp parallel
print *,"hello from a thread"
!$omp end parallel
call ieee_get_halting_mode(ieee_all, saved_fpe_mode)
call ieee_set_halting_mode(ieee_all, .false.)
!$omp parallel do
do i = 1, n
nom(i) = nom(i) / denom(n)
end do
!$omp end parallel do
nom = max(0., nom)
call ieee_set_halting_mode(ieee_all, saved_fpe_mode)
end
When compiled as gfortran-13 -ffpe-trap=zero,invalid,overflow -fopenmp fpe.f90
and run with multiple threads, the code halts with SIGFPE. When the first parallel region is commented out, it does not halt and the result is Infinity
. It also does not halt when the !$omp end parallel
is moved after the ieee_
calls. Is there any intended standardized behaviour?