On 2/28/20 3:53 PM, Segher Boessenkool wrote:
It happens with -O2 already. The frontend generates a MIN_EXPR (or MAX_EXPR) for this, which is undefined for NaNs already. I think the testcase is just invalid?
Ups, that shouldn't happen. It does seem to work here (x86-64-gnu-linux), however, running various compile flags including -O3 and -O2. Regarding MIN and MAX: I think the IEEE 754 decided at some point decided that MAX(x, NaN) = x (IEEE 754:2008 alias ISO 60559:2011, if I recall correctly). I think one has to check what exactly the test case does and what is guaranteed where. I also do not know whether a more recent IEEE 754 (754:2019) has changed something again. The Fortran standard by itself does not know about NaN; however, things do change if an intrinsic IEEE_* module is loaded – I don't quickly which one needs to be loaded and which part has to be checked there. I think in terms of NaN/INF and MAX/MIN, the normal MAX/MIN remain the same (nothing said about nonnormal numbers except 0), but IEEE_MAX_NUM does take care of the IEEE 754 semantic. Tobias PS: I currently do not have the time dig into this; maybe on Monday or at the weekend. ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter