diff options
author | Pedro Alves <palves@redhat.com> | 2013-05-30 08:56:56 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2013-05-30 08:56:56 +0000 |
commit | a6e6f79133abe7ca865a0fabbebf70aa439745be (patch) | |
tree | 944b1df04cdf24e5aff193f132752ed833a4ccde | |
parent | 36d25514de83980be75c42db8c0b190fc284678c (diff) | |
download | gdb-a6e6f79133abe7ca865a0fabbebf70aa439745be.zip gdb-a6e6f79133abe7ca865a0fabbebf70aa439745be.tar.gz gdb-a6e6f79133abe7ca865a0fabbebf70aa439745be.tar.bz2 |
Fix build breakage with Python 2.4.
With Python 2.4, we see this build failure:
./python/python-internal.h: In function 'gdb_Py_DECREF':
./python/python-internal.h:179: warning: dereferencing 'void *' pointer
./python/python-internal.h:179: error: request for member 'ob_refcnt' in something not a structure or union
Python 2.4 forgets to cast 'op' to PyObject pointer on the ob_refcnt
accesses:
#define Py_DECREF(op) \
if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \
--(op)->ob_refcnt != 0) \
_Py_CHECK_REFCNT(op) \
else \
_Py_Dealloc((PyObject *)(op))
...
#define _Py_CHECK_REFCNT(OP) \
{ if ((OP)->ob_refcnt < 0) \
_Py_NegativeRefcount(__FILE__, __LINE__, \
(PyObject *)(OP)); \
}
Python 2.7:
#define Py_DECREF(op) \
do { \
if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \
--((PyObject*)(op))->ob_refcnt != 0) \
_Py_CHECK_REFCNT(op) \
else \
_Py_Dealloc((PyObject *)(op)); \
} while (0)
...
#define _Py_CHECK_REFCNT(OP) \
{ if (((PyObject*)OP)->ob_refcnt < 0) \
_Py_NegativeRefcount(__FILE__, __LINE__, \
(PyObject *)(OP)); \
}
gdb/
2013-05-30 Pedro Alves <palves@redhat.com>
* python/python-internal.h (gdb_Py_DECREF): Cast OP to PyObject
pointer.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/python/python-internal.h | 5 |
2 files changed, 9 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7c00a8e..76e0d60 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2013-05-30 Pedro Alves <palves@redhat.com> + + * python/python-internal.h (gdb_Py_DECREF): Cast OP to PyObject + pointer. + 2013-05-30 Yao Qi <yao@codesourcery.com> * remote.c (remote_check_symbols): Remove unused parameter diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index f47d48a..d947be6 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -176,7 +176,10 @@ typedef unsigned long gdb_py_ulongest; static inline void gdb_Py_DECREF (void *op) /* ARI: editCase function */ { - Py_DECREF (op); + /* ... and Python 2.4 didn't cast OP to PyObject pointer on the + '(op)->ob_refcnt' references within the macro. Cast it ourselves + too. */ + Py_DECREF ((PyObject *) op); } #undef Py_DECREF |