https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109075

--- Comment #5 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
Might be invalid code, see

https://gcc.gnu.org/pipermail/fortran/2023-March/059062.html

That appears to be a problem with widely used old-style linear congruential
random number generators, which expect overflow to just silently
truncate.

Looking at the test case with nagfor -C=all shows the problem:

  0: 0: 0.000 -> Read sequence
  0: 0: 0.150 -> extract extrema
  0: 0: 0.159 -> Generate raw transitions counts
  0: 0: 0.183 -> Compute Markov matrix
  0: 0: 0.184 -> Calculate theoretical rainflow
  0: 0:43.286 -> Simulate random markov sequences
Runtime Error: rnflow.f90, line 902: INTEGER(int32) overflow for 843314861 *
1993

The issue with the patch is that it is also illegal Fortran, because the
assignment outside the value range of a default integer is also illegal.
Again, nagfor catches this:

  0: 0: 0.000 -> Read sequence
  0: 0: 0.140 -> extract extrema
  0: 0: 0.150 -> Generate raw transitions counts
  0: 0: 0.175 -> Compute Markov matrix
  0: 0: 0.175 -> Calculate theoretical rainflow
  0: 0:44.032 -> Simulate random markov sequences
Runtime Error: rnflow.f90, line 905: Overflow converting 1681180334666 to
INTEGER(int32)

So, what to do?  I think we need to mention this in the release notes,
and also a workaround which gives the same result.

If there is a flag which suppresses whatever this does, we could also
set this with -std=legacy (and also mention this in the relase notes).

Reply via email to