]> granicus.if.org Git - python/commitdiff
#21167: Fix definition of NAN when ICC used without -fp-model strict.
authorR David Murray <rdmurray@bitdance.com>
Thu, 13 Aug 2015 13:58:07 +0000 (09:58 -0400)
committerR David Murray <rdmurray@bitdance.com>
Thu, 13 Aug 2015 13:58:07 +0000 (09:58 -0400)
Patch from Chris Hogan of Intel, reviewed by Mark Dickinson.

Include/pymath.h
Misc/ACKS
Misc/NEWS

index 62a6c42bbf0708bed968ada9e079dc449fd63dd0..1ea9ac1437a013196229eaa02acba9b7d069bd6a 100644 (file)
@@ -150,7 +150,29 @@ PyAPI_FUNC(void) _Py_set_387controlword(unsigned short);
  * doesn't support NaNs.
  */
 #if !defined(Py_NAN) && !defined(Py_NO_NAN)
-#define Py_NAN (Py_HUGE_VAL * 0.)
+#if !defined(__INTEL_COMPILER)
+    #define Py_NAN (Py_HUGE_VAL * 0.)
+#else /* __INTEL_COMPILER */
+    #if defined(ICC_NAN_STRICT)
+        #pragma float_control(push)
+        #pragma float_control(precise, on)
+        #pragma float_control(except,  on)
+        #if defined(_MSC_VER)
+            __declspec(noinline)
+        #else /* Linux */
+            __attribute__((noinline))
+        #endif /* _MSC_VER */
+        static double __icc_nan()
+        {
+            return sqrt(-1.0);
+        }
+        #pragma float_control (pop)
+        #define Py_NAN __icc_nan()
+    #else /* ICC_NAN_RELAXED as default for Intel Compiler */
+        static union { unsigned char buf[8]; double __icc_nan; } __nan_store = {0,0,0,0,0,0,0xf8,0x7f};
+        #define Py_NAN (__nan_store.__icc_nan)
+    #endif /* ICC_NAN_STRICT */
+#endif /* __INTEL_COMPILER */
 #endif
 
 /* Py_OVERFLOWED(X)
index 93b2a0b17b91d1863bdd062c4efbd9aadc98dc1d..f5868f9647d97554bcdf275ed8a1ab4719b554e0 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -583,6 +583,7 @@ Gregor Hoffleit
 Chris Hoffman
 Stefan Hoffmeister
 Albert Hofkamp
+Chris Hogan
 Tomas Hoger
 Jonathan Hogg
 Kamilla Holanda
index e2da905cb0f7d8b46666c6b94c1702fb2c823d81..16b33bc272b754b484f2229329c799d805ffd096 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ Release date: tba
 Core and Builtins
 -----------------
 
+- Issue #21167: NAN operations are now handled correctly when python is
+  compiled with ICC even if -fp-model strict is not specified.
+
 - Issue #4395: Better testing and documentation of binary operators.
   Patch by Martin Panter.