diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2015-09-19 11:39:03 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2015-09-19 11:39:03 (GMT) |
commit | 5783fd2c58d068329c1ddeaea1db8acca5e2577b (patch) | |
tree | f513a553276d235ccae873fefe5369879be8d1b8 /Objects/longobject.c | |
parent | f2d7ea1af124aa80df7ec3071a62442294f9196c (diff) | |
download | cpython-5783fd2c58d068329c1ddeaea1db8acca5e2577b.zip cpython-5783fd2c58d068329c1ddeaea1db8acca5e2577b.tar.gz cpython-5783fd2c58d068329c1ddeaea1db8acca5e2577b.tar.bz2 |
Issue #24999: In longobject.c, use two shifts instead of ">> 2*PyLong_SHIFT" to
avoid undefined behaviour when LONG_MAX type is smaller than 60 bits.
This change should fix a warning with the ICC compiler.
Diffstat (limited to 'Objects/longobject.c')
-rw-r--r-- | Objects/longobject.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/Objects/longobject.c b/Objects/longobject.c index 40da0b1..5f22455 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -4495,11 +4495,13 @@ _PyLong_GCD(PyObject *aarg, PyObject *barg) simple: assert(Py_REFCNT(a) > 0); assert(Py_REFCNT(b) > 0); -#if LONG_MAX >> 2*PyLong_SHIFT +/* Issue #24999: use two shifts instead of ">> 2*PyLong_SHIFT" to avoid + undefined behaviour when LONG_MAX type is smaller than 60 bits */ +#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT /* a fits into a long, so b must too */ x = PyLong_AsLong((PyObject *)a); y = PyLong_AsLong((PyObject *)b); -#elif defined(PY_LONG_LONG) && PY_LLONG_MAX >> 2*PyLong_SHIFT +#elif defined(PY_LONG_LONG) && PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT x = PyLong_AsLongLong((PyObject *)a); y = PyLong_AsLongLong((PyObject *)b); #else @@ -4516,9 +4518,9 @@ simple: y = x % y; x = t; } -#if LONG_MAX >> 2*PyLong_SHIFT +#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT return PyLong_FromLong(x); -#elif defined(PY_LONG_LONG) && PY_LLONG_MAX >> 2*PyLong_SHIFT +#elif defined(PY_LONG_LONG) && PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT return PyLong_FromLongLong(x); #else # error "_PyLong_GCD" |