summaryrefslogtreecommitdiffstats
path: root/Objects/longobject.c
diff options
context:
space:
mode:
authorMark Dickinson <mdickinson@enthought.com>2012-10-18 18:53:45 (GMT)
committerMark Dickinson <mdickinson@enthought.com>2012-10-18 18:53:45 (GMT)
commit5cb65917e127effb45cd790decc05d82836af284 (patch)
tree89e9cd8bf31faecf24b0d8e7cd933dbfc77dd4ea /Objects/longobject.c
parent56d279fe35e7d3df988761c8407359399574356c (diff)
parent44362a88ad8d541c46de0e149975d6a9805b981e (diff)
downloadcpython-5cb65917e127effb45cd790decc05d82836af284.zip
cpython-5cb65917e127effb45cd790decc05d82836af284.tar.gz
cpython-5cb65917e127effb45cd790decc05d82836af284.tar.bz2
Issue #16277: merge fix from 3.3
Diffstat (limited to 'Objects/longobject.c')
-rw-r--r--Objects/longobject.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/Objects/longobject.c b/Objects/longobject.c
index ead4680..95bd836 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -935,6 +935,13 @@ _PyLong_AsByteArray(PyLongObject* v,
PyObject *
PyLong_FromVoidPtr(void *p)
{
+#if SIZEOF_VOID_P <= SIZEOF_LONG
+ /* special-case null pointer */
+ if (!p)
+ return PyLong_FromLong(0);
+ return PyLong_FromUnsignedLong((unsigned long)(Py_uintptr_t)p);
+#else
+
#ifndef HAVE_LONG_LONG
# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
#endif
@@ -945,6 +952,7 @@ PyLong_FromVoidPtr(void *p)
if (!p)
return PyLong_FromLong(0);
return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)(Py_uintptr_t)p);
+#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
}