mirror of https://github.com/python/cpython
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.
This commit is contained in:
parent
f2d7ea1af1
commit
5783fd2c58
|
@ -4495,11 +4495,13 @@ _PyLong_GCD(PyObject *aarg, PyObject *barg)
|
||||||
simple:
|
simple:
|
||||||
assert(Py_REFCNT(a) > 0);
|
assert(Py_REFCNT(a) > 0);
|
||||||
assert(Py_REFCNT(b) > 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 */
|
/* a fits into a long, so b must too */
|
||||||
x = PyLong_AsLong((PyObject *)a);
|
x = PyLong_AsLong((PyObject *)a);
|
||||||
y = PyLong_AsLong((PyObject *)b);
|
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);
|
x = PyLong_AsLongLong((PyObject *)a);
|
||||||
y = PyLong_AsLongLong((PyObject *)b);
|
y = PyLong_AsLongLong((PyObject *)b);
|
||||||
#else
|
#else
|
||||||
|
@ -4516,9 +4518,9 @@ simple:
|
||||||
y = x % y;
|
y = x % y;
|
||||||
x = t;
|
x = t;
|
||||||
}
|
}
|
||||||
#if LONG_MAX >> 2*PyLong_SHIFT
|
#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
|
||||||
return PyLong_FromLong(x);
|
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);
|
return PyLong_FromLongLong(x);
|
||||||
#else
|
#else
|
||||||
# error "_PyLong_GCD"
|
# error "_PyLong_GCD"
|
||||||
|
|
Loading…
Reference in New Issue