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)22void 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