1 /* { dg-do compile } */
2 /* { dg-options "-fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } */
3
4 #include <stddef.h>
5 #include <stdlib.h>
6
7 /* Minimal reimplementation of cpython API. */
8 typedef struct PyObject {} PyObject;
9 extern int PyArg_ParseTuple (PyObject *args, const char *fmt, ...);
10 extern PyObject *PyList_New (int);
11 extern PyObject *PyLong_FromLong(long);
12 extern void PyList_Append(PyObject *list, PyObject *item);
13
14 PyObject *
make_a_list_of_random_ints_badly(PyObject * self,PyObject * args)15 make_a_list_of_random_ints_badly(PyObject *self,
16 PyObject *args)
17 {
18 PyObject *list, *item;
19 long count, i;
20
21 if (!PyArg_ParseTuple(args, "i", &count)) {
22 return NULL;
23 }
24
25 list = PyList_New(0);
26
27 for (i = 0; i < count; i++) {
28 item = PyLong_FromLong(random());
29 PyList_Append(list, item); /* { dg-line PyList_Append } */
30 }
31
32 return list;
33
34 /* { dg-error "passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter" "" { target *-*-* } PyList_Append } */
35 /* { dg-begin-multiline-output "" }
36 29 | PyList_Append(list, item);
37 | ^~~~~~~~~~~~~~~~~~~~~~~~~
38 'make_a_list_of_random_ints_badly': events 1-3
39 |
40 | 25 | list = PyList_New(0);
41 | | ^~~~~~~~~~~~~
42 | | |
43 | | (1) when 'PyList_New' fails, returning NULL
44 | 26 |
45 | 27 | for (i = 0; i < count; i++) {
46 | | ~~~
47 | | |
48 | | (2) when 'i < count'
49 | 28 | item = PyLong_FromLong(random());
50 | 29 | PyList_Append(list, item);
51 | | ~~~~~~~~~~~~~~~~~~~~~~~~~
52 | | |
53 | | (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
54 |
55 { dg-end-multiline-output "" } */
56 }
57