summaryrefslogtreecommitdiffstats
path: root/Objects/longobject.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-09-19 11:39:03 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2015-09-19 11:39:03 (GMT)
commit5783fd2c58d068329c1ddeaea1db8acca5e2577b (patch)
treef513a553276d235ccae873fefe5369879be8d1b8 /Objects/longobject.c
parentf2d7ea1af124aa80df7ec3071a62442294f9196c (diff)
downloadcpython-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.c10
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"