The previous patch was sufficient for clang without optimization. For "clang -O2", another patch is needed in order to prevent the wrong NaNf(), NaNl() results.
2023-11-06 Bruno Haible <br...@clisp.org> nan: Defeat clang's incorrect -O2 optimization on mips64. * lib/nan.h (NaNf, NaNd, NaNl): Use 'volatile' to disable a clang optimization. diff --git a/lib/nan.h b/lib/nan.h index 219b25aeac..50917488bb 100644 --- a/lib/nan.h +++ b/lib/nan.h @@ -37,7 +37,7 @@ static float NaNf () { - static float zero = 0.0f; + static float volatile zero = 0.0f; return zero / zero; } #else @@ -57,7 +57,7 @@ NaNf () static double NaNd () { - static double zero = 0.0; + static double volatile zero = 0.0; return zero / zero; } #else @@ -86,7 +86,7 @@ static long double NaNl () static long double NaNl () { - static long double zero = 0.0L; + static long double volatile zero = 0.0L; return zero / zero; } #else