[gfortran,patch] Make MIN and MAX handle NaNs correctly (PR32048)

Jerry DeLisle jvdelisle@verizon.net
Sat Jul 28 15:20:00 GMT 2007


FX Coudert wrote:
> Attached patch makes MIN and MAX intrinsics return correct IEEE results 
> (and consistent results) when given one or more NaN as arguments. It 
> does so by changing the code generated from MAX(a,b) := (b > a ? b : a) 
> into MAX(a,b) := (b > a || isnan(a) ? b : a); handling of multiple 
> arguments is done similarly.
> 
> The introduction of isnan() tests probably has a cost, but hey, we want 
> a correct result anyway, don't we? Thus, I added a note into the code 
> saying that when IEEE_ARITHMETIC is implemented, we might want to make 
> this codepath dependent on IEEE_ARITHMETIC being used (I don't think we 
> should do that, but we should certainly discuss the option).
> 
> I also added a testcase, I don't have much experience with NaNs so I 
> don't know if all targets have them, does someone know if "x = 0.0 ; x = 
> x / x;" will result in a NaN in all cases?

Take a look in the testsuite at real_constant_3.f90.  I suppose this is really 
only testing mpfr.  I wonder if we should modify this or come up with a new test 
case that forces these values to be computed at run time.
> 
> Bootstrapped and regtested on x86_64-linux, OK for mainline?
> FX
> 
> :ADDPATH fortran:
This is OK.




More information about the Fortran mailing list