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




Reply via email to