This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix Python 3 build error on 32-bit hosts


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=881d5d5db08ee6b343e1f1fc560d785fed29428e

commit 881d5d5db08ee6b343e1f1fc560d785fed29428e
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Wed Feb 4 20:31:17 2015 +0100

    Fix Python 3 build error on 32-bit hosts
    
    on Fedora Rawhide (==22) i686 using --with-python=/usr/bin/python3 one gets:
    
    ./python/py-value.c:1696:3: error: initialization from incompatible pointer type [-Werror]
       valpy_hash,            /*tp_hash*/
       ^
    ./python/py-value.c:1696:3: error: (near initialization for â??value_object_type.tp_hashâ??) [-Werror]
    cc1: all warnings being treated as errors
    Makefile:2628: recipe for target 'py-value.o' failed
    
    This is because in Python 2 tp_hash was:
    	typedef long (*hashfunc)(PyObject *);
    while in Python 3 tp_hash is:
    	typedef Py_hash_t (*hashfunc)(PyObject *);
    
    Py_hash_t is int for 32-bit hosts and long for 64-bit hosts.  While on 32-bit
    hosts sizeof(long)==sizeof(int) still the hashfunc type is formally
    incompatible.  As this patch should have no compiled code change it is not
    really necessary for gdb-7.9, it would fix there just this non-fatal
    compilation warning:
    	./python/py-value.c:1696:3: warning: initialization from incompatible pointer type
    	   valpy_hash,            /*tp_hash*/
    	   ^
    	./python/py-value.c:1696:3: warning: (near initialization for â??value_object_type.tp_hashâ??)
    
    gdb/ChangeLog
    2015-02-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
    
    	* python/python-internal.h (Py_hash_t): Define it for Python <3.2.
    	* python/py-value.c (valpy_fetch_lazy): Use it.  Remove cast to the
    	return type.

Diff:
---
 gdb/ChangeLog                | 6 ++++++
 gdb/python/py-value.c        | 4 ++--
 gdb/python/python-internal.h | 4 ++++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index aae6a7c..cd1c9d7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* python/python-internal.h (Py_hash_t): Define it for Python <3.2.
+	* python/py-value.c (valpy_fetch_lazy): Use it.  Remove cast to the
+	return type.
+
 2015-02-04  Pedro Alves  <palves@redhat.com>
 
 	* linux-nat.c (handle_extended_wait): Don't resume LWPs here.
diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c
index 4c4d36e..5a13777 100644
--- a/gdb/python/py-value.c
+++ b/gdb/python/py-value.c
@@ -895,10 +895,10 @@ valpy_fetch_lazy (PyObject *self, PyObject *args)
 
 /* Calculate and return the address of the PyObject as the value of
    the builtin __hash__ call.  */
-static long
+static Py_hash_t
 valpy_hash (PyObject *self)
 {
-  return (long) (intptr_t) self;
+  return (intptr_t) self;
 }
 
 enum valpy_opcode
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 0ee8544..a77f5a6 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -169,6 +169,10 @@ typedef unsigned long gdb_py_ulongest;
 
 #endif /* HAVE_LONG_LONG */
 
+#if PY_VERSION_HEX < 0x03020000
+typedef long Py_hash_t;
+#endif
+
 /* Python 2.6 did not wrap Py_DECREF in 'do {...} while (0)', leading
    to 'suggest explicit braces to avoid ambiguous â??elseâ??' gcc errors.
    Wrap it ourselves, so that callers don't need to care.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]