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

--- Comment #4 from mjr19 at cam dot ac.uk ---
Add using

  seed=iand(seed*int(1103515245,selected_int_kind(18))+12345,z'7fffffff')

also works as expected. Converting the code to C shows the same behaviour as
the Fortran if seed is a static int (overflows on ints are also undefined in
C), whereas using a static unsigned int (for which overflows are defined) gives
the same result at -O3 as at other optimisation levels, and the results I had
expected, but not actually been entitled to.

Thanks for pointing out the consequences of my sloppy Fortran.

Reply via email to