annotate gcc/testsuite/gcc.dg/analyzer/analyzer-verbosity-2.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=2" } */
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': events 1-4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 | NN | void test_1 (void *ptr, int a, int b)
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) entry to 'test_1'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 | NN | {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 | NN | if (a)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 | | ~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 | | (2) following 'true' branch (when 'a != 0')...
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 | NN | calls_free_1 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 | | ~~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 | | (3) ...to here
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 | | (4) calling 'calls_free_1' from 'test_1'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 +--> 'calls_free_1': events 5-6
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 | NN | void calls_free_1 (void *ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 | | ^~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 | | (5) entry to 'calls_free_1'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 | NN | {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 | | ~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 | | (6) first 'free' here
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 <------+
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 'test_1': events 7-10
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 | NN | calls_free_1 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 | | ^~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 | | (7) returning to 'test_1' from 'calls_free_1'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 | NN |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 | NN | if (b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 | | ~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 | | (8) following 'false' branch (when 'b == 0')...
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 |......
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 | NN | calls_free_1 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 | | ~~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 | | (9) ...to here
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 | | (10) passing freed pointer 'ptr' in call to 'calls_free_1' from 'test_1'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 +--> 'calls_free_1': events 11-12
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 | NN | void calls_free_1 (void *ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 | | ^~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 | | (11) entry to 'calls_free_1'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 | NN | {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 | | ~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85 | | (12) second 'free' here; first 'free' was at (6)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 { dg-end-multiline-output "" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 void calls_free_2 (void *ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 void test_2 (void *ptr, int a, int b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 switch (a)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 default:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 case 1:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102 case 3:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 calls_free_2 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107 switch (b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 default:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110 calls_free_2 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 case 1:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 case 42:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 break;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119 /* { dg-begin-multiline-output "" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121 | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 'test_2': events 1-4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 | NN | void test_2 (void *ptr, int a, int b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 | | ^~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 | | (1) entry to 'test_2'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128 | NN | {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129 | NN | switch (a)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 | | ~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132 | | (2) following 'case 3:' branch...
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133 |......
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134 | NN | case 3:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 | | ~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137 | | (3) ...to here
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 | NN | calls_free_2 (ptr);
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 | | (4) calling 'calls_free_2' from 'test_2'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 +--> 'calls_free_2': events 5-6
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 | NN | void calls_free_2 (void *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 | | (5) entry to 'calls_free_2'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 | NN | {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 | | ~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 | | (6) first 'free' here
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 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
157 'test_2': events 7-10
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
158 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 | NN | calls_free_2 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160 | | ^~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 | | (7) returning to 'test_2' from 'calls_free_2'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 |......
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
164 | NN | switch (b)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
165 | | ~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
166 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
167 | | (8) following 'default:' branch...
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
168 | NN | {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
169 | NN | default:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
170 | | ~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
171 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
172 | | (9) ...to here
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
173 | NN | calls_free_2 (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
174 | | ~~~~~~~~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
175 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
176 | | (10) passing freed pointer 'ptr' in call to 'calls_free_2' from 'test_2'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
177 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
178 +--> 'calls_free_2': events 11-12
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
179 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
180 | NN | void calls_free_2 (void *ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
181 | | ^~~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
182 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
183 | | (11) entry to 'calls_free_2'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
184 | NN | {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
185 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
186 | | ~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
187 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
188 | | (12) second 'free' here; first 'free' was at (6)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
189 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
190 { dg-end-multiline-output "" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
191
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
192 // TODO: range cases
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
193
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
194 /* The call/return to this function shouldn't appear in the path. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
195
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
196 void called_by_test_3 (void)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
197 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
198 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
199
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
200 void test_3 (void *ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
201 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
202 free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
203 called_by_test_3 ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
204 free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
205 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
206
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
207 /* { dg-begin-multiline-output "" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
208 NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
209 | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
210 'test_3': events 1-2
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
211 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
212 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
213 | | ^~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
214 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
215 | | (1) first 'free' here
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
216 | NN | called_by_test_3 ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
217 | NN | free (ptr);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
218 | | ~~~~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
219 | | |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
220 | | (2) second 'free' here; first 'free' was at (1)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
221 |
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
222 { dg-end-multiline-output "" } */