https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109265
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Adjusted testcase: module pr109265 integer, parameter :: r8 = selected_real_kind (12) contains subroutine foo (b, c, d, e, f) implicit none logical :: b real (kind = r8) :: c, d, e, f, i if (b) then c = bar (c * d, e) i = bar (f, c) call baz (i) call baz (-i) end if end subroutine foo function bar (a, b) implicit none real (kind = r8) :: bar real (kind = r8) :: a, b bar = a + b end function bar subroutine baz (b) implicit none real (kind = r8) :: b, d, e, f, g, h, i d = b i = 0 e = d f = d g = d 10 continue if ((e.eq.d) .and. (f.eq.d) .and. (g.eq.d) .and. (h.eq.d)) then h = i go to 10 end if end subroutine baz end module pr109265 It uses one uninitialized variable (h, D2 in the above one; but we shouldn't ICE on it).