blob: bd09391a8b28159a3b65f7c76e0ebe3c466647e6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
/* { dg-do compile } */
/* { dg-options "-fdiagnostics-format=sarif-file" } */
/* { dg-excess-errors "The error is sent to the SARIF file, rather than stderr" } */
#include <stddef.h>
#include <stdlib.h>
/* Minimal reimplementation of cpython API. */
typedef struct PyObject {} PyObject;
extern int PyArg_ParseTuple (PyObject *args, const char *fmt, ...);
extern PyObject *PyList_New (int);
extern PyObject *PyLong_FromLong(long);
extern void PyList_Append(PyObject *list, PyObject *item);
PyObject *
make_a_list_of_random_ints_badly(PyObject *self,
PyObject *args)
{
PyObject *list, *item;
long count, i;
if (!PyArg_ParseTuple(args, "i", &count)) {
return NULL;
}
list = PyList_New(0);
for (i = 0; i < count; i++) {
item = PyLong_FromLong(random());
PyList_Append(list, item);
}
return list;
}
/*
{ dg-final { scan-sarif-file "\"tool\": " } }
We expect info about the plugin:
{ dg-final { scan-sarif-file "\"extensions\": \\\[" } }
{ dg-final { scan-sarif-file "\"name\": \"diagnostic_plugin_test_paths\"" } }
{ dg-final { scan-sarif-file "\"fullName\": \"" } }
{ dg-final { scan-sarif-file "\"results\": \\\[" } }
{ dg-final { scan-sarif-file "\"level\": \"error\"" } }
{ dg-final { scan-sarif-file "\"text\": \"passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter\"" } }
We expect a path for the diagnostic:
{ dg-final { scan-sarif-file "\"codeFlows\": \\\[" } }
{ dg-final { scan-sarif-file "\"threadFlows\": \\\[" } }
{ dg-final { scan-sarif-file "\"locations\": \\\[" } }
{ dg-final { scan-sarif-file "\"text\": \"when 'PyList_New' fails, returning NULL\"" } }
{ dg-final { scan-sarif-file "\"text\": \"when 'i < count'\"" } }
{ dg-final { scan-sarif-file "\"text\": \"when calling 'PyList_Append', passing NULL from \\(1\\) as argument 1\"" } }
*/
|