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 /gdb/python/python-internal.h | |
| parent | 36d25514de83980be75c42db8c0b190fc284678c (diff) | |
| download | binutils-a6e6f79133abe7ca865a0fabbebf70aa439745be.zip binutils-a6e6f79133abe7ca865a0fabbebf70aa439745be.tar.gz binutils-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.
Diffstat (limited to 'gdb/python/python-internal.h')
| -rw-r--r-- | gdb/python/python-internal.h | 5 | 
1 files changed, 4 insertions, 1 deletions
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  | 
