#include "analyzer-decls.h"

typedef struct obj {
  int ob_refcnt;
} PyObject;

extern void Py_Dealloc (PyObject *op);

#define Py_INCREF(op)			\
  do {					\
    ((PyObject*)(op))->ob_refcnt++;	\
  } while (0)

#define Py_DECREF(op)                                   \
    do {                                                \
      if (--((PyObject*)(op))->ob_refcnt == 0)		\
	{						\
	  /*Py_Dealloc((PyObject *)(op));*/		\
	}						\
    } while (0)

void test_1 (PyObject *obj)
{
  int orig_refcnt = obj->ob_refcnt;
  Py_INCREF (obj);
  Py_INCREF (obj);
  Py_DECREF (obj);
  Py_INCREF (obj);
  __analyzer_eval (obj->ob_refcnt == orig_refcnt + 2); /* { dg-warning "TRUE" } */
}
/* TODO: uncomment the Py_Dealloc, which leads to two paths.  */