1 #include "analyzer-decls.h"
2 
3 typedef struct obj {
4   int ob_refcnt;
5 } PyObject;
6 
7 extern void Py_Dealloc (PyObject *op);
8 
9 #define Py_INCREF(op)			\
10   do {					\
11     ((PyObject*)(op))->ob_refcnt++;	\
12   } while (0)
13 
14 #define Py_DECREF(op)                                   \
15     do {                                                \
16       if (--((PyObject*)(op))->ob_refcnt == 0)		\
17 	{						\
18 	  /*Py_Dealloc((PyObject *)(op));*/		\
19 	}						\
20     } while (0)
21 
test_1(PyObject * obj)22 void test_1 (PyObject *obj)
23 {
24   int orig_refcnt = obj->ob_refcnt;
25   Py_INCREF (obj);
26   Py_INCREF (obj);
27   Py_DECREF (obj);
28   Py_INCREF (obj);
29   __analyzer_eval (obj->ob_refcnt == orig_refcnt + 2); /* { dg-warning "TRUE" } */
30 }
31 /* TODO: uncomment the Py_Dealloc, which leads to two paths.  */
32