https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82004
--- Comment #27 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So, I've tried to create a small reproducer that actually shows what sw_absorption.F90 is doing (from the above URL, so not actually from the SPEC provided sources) and can't reproduce a problem: ! PR middle-end/82004 ! { dg-do run } ! { dg-options "-Ofast" } integer, parameter :: r8 = selected_real_kind(13), i4 = kind(1) integer (i4), parameter :: a = 400, b = 31 real (r8), parameter, dimension(b) :: c = (/ .001_r8, .005_r8, & .01_r8, .02_r8, .03_r8, .05_r8, .10_r8, .15_r8, .20_r8, & .25_r8, .30_r8, .35_r8, .40_r8, .45_r8, .50_r8, .60_r8, & .70_r8, .80_r8, .90_r8, 1.00_r8, 1.50_r8, 2.00_r8, 2.50_r8, & 3.00_r8, 4.00_r8, 5.00_r8, 6.00_r8, 7.00_r8, 8.00_r8, & 9.00_r8,10.00_r8 /) integer (i4), parameter, dimension(b) :: p = (/ 70, 31, 30, & 17, 22, 31, 17, 13, 9, 8, 7, 6, 5, 4, 8, 7, 6, 5, 5, 17, 13, & 9, 8, 13, 9, 8, 7, 6, 5, 5, 0 /) real (r8) :: d, e, f, g, h integer (i4) :: n, m integer (i4), dimension(b) :: o d = c(1) e = c(b) o = 0 f = (log10(e)-log10(d))/real(a) g = log10(d) - f do n = 0, a g = g + f h = 10**(g) do m = 1, b - 1 if (c(m) .le. h .and. h .le. c(m + 1)) then o(m) = o(m) + 1 end if end do end do if (any (o .ne. p)) stop 1 end Maybe we peel off the first iteration (which is all we care about here, all other values are not within ulps of the bounds) on this smaller testcase and not on 628.pop2_s?