Merged revisions 71229,71271 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r71229 | matthias.klose | 2009-04-05 14:43:08 +0200 (So, 05 Apr 2009) | 3 lines

  - Py_DECREF: Add `do { ... } while (0)' to avoid compiler warnings.
    (avoiding brown paper typo this time)
........
  r71271 | matthias.klose | 2009-04-05 23:19:13 +0200 (So, 05 Apr 2009) | 3 lines

  Issue #1113244: Py_XINCREF, Py_DECREF, Py_XDECREF: Add `do { ... } while (0)'
  to avoid compiler warnings.
........
diff --git a/Include/object.h b/Include/object.h
index c71bca6..d79b6ab 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -651,11 +651,13 @@
 	((PyObject*)(op))->ob_refcnt++)
 
 #define Py_DECREF(op)					\
-	if (_Py_DEC_REFTOTAL  _Py_REF_DEBUG_COMMA	\
-	    --((PyObject*)(op))->ob_refcnt != 0)		\
-		_Py_CHECK_REFCNT(op)			\
-	else						\
-		_Py_Dealloc((PyObject *)(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)
 
 /* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
  * and tp_dealloc implementatons.
@@ -701,8 +703,8 @@
         } while (0)
 
 /* Macros to use in case the object pointer may be NULL: */
-#define Py_XINCREF(op) if ((op) == NULL) ; else Py_INCREF(op)
-#define Py_XDECREF(op) if ((op) == NULL) ; else Py_DECREF(op)
+#define Py_XINCREF(op) do { if ((op) == NULL) ; else Py_INCREF(op); } while (0)
+#define Py_XDECREF(op) do { if ((op) == NULL) ; else Py_DECREF(op); } while (0)
 
 /*
 These are provided as conveniences to Python runtime embedders, so that