Skip to content
  • Jan Kratochvil's avatar
    Fix Python 3 build error on 32-bit hosts · 881d5d5d
    Jan Kratochvil authored
    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.
    881d5d5d