(original) (raw)

changeset: 97365:d9c85b6bab3a branch: 2.7 parent: 97340:089f1a23dfac user: R David Murray rdmurray@bitdance.com date: Thu Aug 13 09:48:35 2015 -0400 files: Include/pymath.h Misc/ACKS Misc/NEWS description: #21167: Fix definition of NAN when ICC used without -fp-model strict. Patch from Chris Hogan of Intel, reviewed by Mark Dickinson. diff -r 089f1a23dfac -r d9c85b6bab3a Include/pymath.h --- a/Include/pymath.h Sun Aug 09 13:07:06 2015 +0300 +++ b/Include/pymath.h Thu Aug 13 09:48:35 2015 -0400 @@ -152,7 +152,29 @@ * 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) diff -r 089f1a23dfac -r d9c85b6bab3a Misc/ACKS --- a/Misc/ACKS Sun Aug 09 13:07:06 2015 +0300 +++ b/Misc/ACKS Thu Aug 13 09:48:35 2015 -0400 @@ -573,6 +573,7 @@ Chris Hoffman Stefan Hoffmeister Albert Hofkamp +Chris Hogan Tomas Hoger Jonathan Hogg Kamilla Holanda diff -r 089f1a23dfac -r d9c85b6bab3a Misc/NEWS --- a/Misc/NEWS Sun Aug 09 13:07:06 2015 +0300 +++ b/Misc/NEWS Thu Aug 13 09:48:35 2015 -0400 @@ -10,6 +10,9 @@ 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 #24467: Fixed possible buffer over-read in bytearray. The bytearray object now always allocates place for trailing null byte and it's buffer now is always null-terminated. /rdmurray@bitdance.com