https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95053
--- Comment #27 from Steve Kargl <sgk at troutmask dot apl.washington.edu> --- On Thu, May 14, 2020 at 06:39:24PM +0000, tkoenig at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95053 > > --- Comment #26 from Thomas Koenig <tkoenig at gcc dot gnu.org> --- > (In reply to wschmidt from comment #24) > > > I'm afraid I disagree. A divide-by-zero that cannot ever be executed is > > not an error. > > Well, there is PR90302. We could insert some piece of code into the > IL. A warning or an error could then be issued if the piece of code is still > present after the final optimization. > > It would make a nice project, and remove a few more false positives > as well. > gfortran supports a legacy extension of jumping into a if-block. Prior to Harald's patch (which fixes at least 1 ICE), we have % cat a.f90 program foo real x, y real, parameter :: c = 0 x = 1 y = 2 goto 10 if (c > 0) then 10 x = (y / c) * c end if print *, x, y end program foo % gfcx -o z a.f90 && ./z a.f90:8:2: 6 | goto 10 | 2 7 | if (c > 0) then 8 | 10 x = (y / c) * c | 1 Warning: Legacy Extension: Label at (1) is not in the same block as the GOTO statement at (2) NaN 2.00000000 So, using 'if (c > 0)' to assume DCE occurs is invalid as the code is reachable. Perhaps, my original patch submitted at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93499#c2 should have been committed with no attempt to aid a programmer from making a potential mistake.