annotate gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-0.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret -fanalyzer-verbosity=0" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 /* { dg-enable-nn-line-numbers "" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 #include <stdlib.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 void calls_free_1 (void *ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 void test_1 (void *ptr, int a, int b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 if (a)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 calls_free_1 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 if (b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 calls_free_1 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 /* { dg-begin-multiline-output "" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 'test_1': event 1
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 | NN | calls_free_1 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 | | ^~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 | | (1) calling 'calls_free_1' from 'test_1'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 +--> 'calls_free_1': event 2
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 | | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 | | (2) first 'free' here
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 <------+
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 'test_1': events 3-4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 | NN | calls_free_1 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 | | ^~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 | | (3) returning to 'test_1' from 'calls_free_1'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 |......
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 | NN | calls_free_1 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 | | ~~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 | | (4) passing freed pointer 'ptr' in call to 'calls_free_1' from 'test_1'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 +--> 'calls_free_1': event 5
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 | | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 | | (5) second 'free' here; first 'free' was at (2)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 { dg-end-multiline-output "" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 void calls_free_2 (void *ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 void test_2 (void *ptr, int a, int b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 switch (a)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 default:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 case 1:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 case 3:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 calls_free_2 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 switch (b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 default:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 calls_free_2 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 case 1:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 case 42:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 /* { dg-begin-multiline-output "" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 'test_2': event 1
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 | NN | calls_free_2 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 | | ^~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 | | (1) calling 'calls_free_2' from 'test_2'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 +--> 'calls_free_2': event 2
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 | | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108 | | (2) first 'free' here
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110 <------+
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 'test_2': events 3-4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 | NN | calls_free_2 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 | | ^~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 | | (3) returning to 'test_2' from 'calls_free_2'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118 |......
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119 | NN | calls_free_2 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 | | ~~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 | | (4) passing freed pointer 'ptr' in call to 'calls_free_2' from 'test_2'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 +--> 'calls_free_2': event 5
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 | | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129 | | (5) second 'free' here; first 'free' was at (2)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 { dg-end-multiline-output "" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133 // TODO: range cases
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 /* The call/return to this function shouldn't appear in the path. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137 void called_by_test_3 (void)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141 void test_3 (void *ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 called_by_test_3 ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
147
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
148 /* { dg-begin-multiline-output "" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150 | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 'test_3': events 1-2
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
154 | | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
155 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
156 | | (1) first 'free' here
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
157 | NN | called_by_test_3 ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
158 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 | | ~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161 | | (2) second 'free' here; first 'free' was at (1)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 { dg-end-multiline-output "" } */