/* { dg-do compile } */ /* { dg-require-effective-target analyzer } */ /* { dg-options "-fanalyzer" } */ /* { dg-require-python-h "" } */ #define PY_SSIZE_T_CLEAN #include #include "../analyzer/analyzer-decls.h" PyObject * test_PyListAppend (long n) { PyObject *item = PyLong_FromLong (n); PyObject *list = PyList_New (0); PyList_Append(list, item); return list; /* { dg-warning "leak of 'item'" } */ /* { dg-warning "expected 'item' to have reference count" "" { target *-*-* } .-1 } */ } PyObject * test_PyListAppend_2 (long n) { PyObject *item = PyLong_FromLong (n); if (!item) return NULL; __analyzer_eval (item->ob_refcnt == 1); /* { dg-warning "TRUE" } */ PyObject *list = PyList_New (n); if (!list) { Py_DECREF(item); return NULL; } __analyzer_eval (list->ob_refcnt == 1); /* { dg-warning "TRUE" } */ if (PyList_Append (list, item) < 0) __analyzer_eval (item->ob_refcnt == 1); /* { dg-warning "TRUE" } */ else __analyzer_eval (item->ob_refcnt == 2); /* { dg-warning "TRUE" } */ return list; /* { dg-warning "leak of 'item'" } */ /* { dg-warning "expected 'item' to have reference count" "" { target *-*-* } .-1 } */ } PyObject * test_PyListAppend_3 (PyObject *item, PyObject *list) { PyList_Append (list, item); return list; } PyObject * test_PyListAppend_4 (long n) { PyObject *item = PyLong_FromLong (n); PyObject *list = NULL; PyList_Append(list, item); return list; } PyObject * test_PyListAppend_5 () { PyObject *list = PyList_New (0); PyList_Append(list, NULL); return list; } PyObject * test_PyListAppend_6 () { PyObject *item = NULL; PyObject *list = NULL; PyList_Append(list, item); return list; }