@@ -489,7 +489,7 @@ static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
489489 _Py_TYPEOF (op) _tmp_old_op = (*_tmp_op_ptr); \
490490 if (_tmp_old_op != _Py_NULL) { \
491491 *_tmp_op_ptr = _Py_NULL; \
492- Py_DECREF (_tmp_old_op); \
492+ Py_DECREF (_PyObject_CAST ( _tmp_old_op) ); \
493493 } \
494494 } while (0 )
495495#elif defined(__cplusplus) && (__cplusplus >= 201103L || _MSVC_LANG >= 201103L)
@@ -499,14 +499,15 @@ static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
499499 auto _tmp_old_op = (*_tmp_op_ptr); \
500500 if (_tmp_old_op != _Py_NULL) { \
501501 *_tmp_op_ptr = _Py_NULL; \
502- Py_DECREF (_tmp_old_op); \
502+ Py_DECREF (_PyObject_CAST ( _tmp_old_op) ); \
503503 } \
504504 } while (0 )
505505#else
506506#define Py_CLEAR (op ) \
507507 do { \
508508 PyObject **_tmp_op_ptr = _Py_CAST (PyObject**, &(op)); \
509- PyObject *_tmp_old_op = (*_tmp_op_ptr); \
509+ PyObject *_tmp_old_op; \
510+ memcpy (&_tmp_old_op, _tmp_op_ptr, sizeof (PyObject*)); \
510511 if (_tmp_old_op != _Py_NULL) { \
511512 PyObject *_null_ptr = _Py_NULL; \
512513 memcpy (_tmp_op_ptr, &_null_ptr, sizeof (PyObject*)); \
@@ -545,22 +546,23 @@ static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
545546 _Py_TYPEOF (&(dst)) _tmp_dst_ptr = &(dst); \
546547 _Py_TYPEOF (dst) _tmp_old_dst = (*_tmp_dst_ptr); \
547548 *_tmp_dst_ptr = (src); \
548- Py_DECREF (_tmp_old_dst); \
549+ Py_DECREF (_PyObject_CAST ( _tmp_old_dst) ); \
549550 } while (0 )
550551#elif defined(__cplusplus) && (__cplusplus >= 201103L || _MSVC_LANG >= 201103L)
551552#define Py_SETREF (dst, src ) \
552553 do { \
553554 auto _tmp_dst_ptr = &(dst); \
554555 auto _tmp_old_dst = (*_tmp_dst_ptr); \
555556 *_tmp_dst_ptr = (src); \
556- Py_DECREF (_tmp_old_dst); \
557+ Py_DECREF (_PyObject_CAST ( _tmp_old_dst) ); \
557558 } while (0 )
558559#else
559560#define Py_SETREF (dst, src ) \
560561 do { \
561562 PyObject **_tmp_dst_ptr = _Py_CAST (PyObject**, &(dst)); \
562- PyObject *_tmp_old_dst = (*_tmp_dst_ptr) ; \
563+ PyObject *_tmp_old_dst; \
563564 PyObject *_tmp_src = _PyObject_CAST (src); \
565+ memcpy (&_tmp_old_dst, _tmp_dst_ptr, sizeof (PyObject*)); \
564566 memcpy (_tmp_dst_ptr, &_tmp_src, sizeof (PyObject*)); \
565567 Py_DECREF (_tmp_old_dst); \
566568 } while (0 )
@@ -575,22 +577,23 @@ static inline Py_ALWAYS_INLINE void Py_DECREF(PyObject *op)
575577 _Py_TYPEOF (&(dst)) _tmp_dst_ptr = &(dst); \
576578 _Py_TYPEOF (dst) _tmp_old_dst = (*_tmp_dst_ptr); \
577579 *_tmp_dst_ptr = (src); \
578- Py_XDECREF (_tmp_old_dst); \
580+ Py_XDECREF (_PyObject_CAST ( _tmp_old_dst) ); \
579581 } while (0 )
580582#elif defined(__cplusplus) && (__cplusplus >= 201103L || _MSVC_LANG >= 201103L)
581583#define Py_XSETREF (dst, src ) \
582584 do { \
583585 auto _tmp_dst_ptr = &(dst); \
584586 auto _tmp_old_dst = (*_tmp_dst_ptr); \
585587 *_tmp_dst_ptr = (src); \
586- Py_XDECREF (_tmp_old_dst); \
588+ Py_XDECREF (_PyObject_CAST ( _tmp_old_dst) ); \
587589 } while (0 )
588590#else
589591#define Py_XSETREF (dst, src ) \
590592 do { \
591593 PyObject **_tmp_dst_ptr = _Py_CAST (PyObject**, &(dst)); \
592- PyObject *_tmp_old_dst = (*_tmp_dst_ptr) ; \
594+ PyObject *_tmp_old_dst; \
593595 PyObject *_tmp_src = _PyObject_CAST (src); \
596+ memcpy (&_tmp_old_dst, _tmp_dst_ptr, sizeof (PyObject*)); \
594597 memcpy (_tmp_dst_ptr, &_tmp_src, sizeof (PyObject*)); \
595598 Py_XDECREF (_tmp_old_dst); \
596599 } while (0 )
0 commit comments