• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -verify %s
2 // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file %s -o - | FileCheck %s
3 
foo_irrelevant(int c)4 void foo_irrelevant(int c) {
5     if (c)
6         return;
7     c++;
8     return;
9 }
foo(int c,int * x)10 void foo(int c, int *x) {
11     if (c)
12            //expected-note@-1{{Assuming 'c' is not equal to 0}}
13            //expected-note@-2{{Taking true branch}}
14         return;
15     *x = 5;
16 }
17 
use(int c)18 int use(int c) {
19     int xx; //expected-note{{Variable 'xx' declared without an initial value}}
20     int *y = &xx;
21     foo (c, y);
22                 //expected-note@-1{{Calling 'foo'}}
23                 //expected-note@-2{{Returning from 'foo'}}
24     foo_irrelevant(c);
25     return xx+3; //expected-warning{{The left operand of '+' is a garbage value}}
26                  //expected-note@-1{{The left operand of '+' is a garbage value}}
27 }
28 
29 //CHECK:  <dict>
30 //CHECK:   <key>files</key>
31 //CHECK:   <array>
32 //CHECK:   </array>
33 //CHECK:   <key>diagnostics</key>
34 //CHECK:   <array>
35 //CHECK:    <dict>
36 //CHECK:     <key>path</key>
37 //CHECK:     <array>
38 //CHECK:      <dict>
39 //CHECK:       <key>kind</key><string>event</string>
40 //CHECK:       <key>location</key>
41 //CHECK:       <dict>
42 //CHECK:        <key>line</key><integer>19</integer>
43 //CHECK:        <key>col</key><integer>5</integer>
44 //CHECK:        <key>file</key><integer>0</integer>
45 //CHECK:       </dict>
46 //CHECK:       <key>ranges</key>
47 //CHECK:       <array>
48 //CHECK:         <array>
49 //CHECK:          <dict>
50 //CHECK:           <key>line</key><integer>19</integer>
51 //CHECK:           <key>col</key><integer>5</integer>
52 //CHECK:           <key>file</key><integer>0</integer>
53 //CHECK:          </dict>
54 //CHECK:          <dict>
55 //CHECK:           <key>line</key><integer>19</integer>
56 //CHECK:           <key>col</key><integer>10</integer>
57 //CHECK:           <key>file</key><integer>0</integer>
58 //CHECK:          </dict>
59 //CHECK:         </array>
60 //CHECK:       </array>
61 //CHECK:       <key>depth</key><integer>0</integer>
62 //CHECK:       <key>extended_message</key>
63 //CHECK:       <string>Variable &apos;xx&apos; declared without an initial value</string>
64 //CHECK:       <key>message</key>
65 //CHECK:  <string>Variable &apos;xx&apos; declared without an initial value</string>
66 //CHECK:      </dict>
67 //CHECK:      <dict>
68 //CHECK:       <key>kind</key><string>control</string>
69 //CHECK:       <key>edges</key>
70 //CHECK:        <array>
71 //CHECK:         <dict>
72 //CHECK:          <key>start</key>
73 //CHECK:           <array>
74 //CHECK:            <dict>
75 //CHECK:             <key>line</key><integer>19</integer>
76 //CHECK:             <key>col</key><integer>5</integer>
77 //CHECK:             <key>file</key><integer>0</integer>
78 //CHECK:            </dict>
79 //CHECK:            <dict>
80 //CHECK:             <key>line</key><integer>19</integer>
81 //CHECK:             <key>col</key><integer>7</integer>
82 //CHECK:             <key>file</key><integer>0</integer>
83 //CHECK:            </dict>
84 //CHECK:           </array>
85 //CHECK:          <key>end</key>
86 //CHECK:           <array>
87 //CHECK:            <dict>
88 //CHECK:             <key>line</key><integer>21</integer>
89 //CHECK:             <key>col</key><integer>5</integer>
90 //CHECK:             <key>file</key><integer>0</integer>
91 //CHECK:            </dict>
92 //CHECK:            <dict>
93 //CHECK:             <key>line</key><integer>21</integer>
94 //CHECK:             <key>col</key><integer>7</integer>
95 //CHECK:             <key>file</key><integer>0</integer>
96 //CHECK:            </dict>
97 //CHECK:           </array>
98 //CHECK:         </dict>
99 //CHECK:        </array>
100 //CHECK:      </dict>
101 //CHECK:      <dict>
102 //CHECK:       <key>kind</key><string>event</string>
103 //CHECK:       <key>location</key>
104 //CHECK:       <dict>
105 //CHECK:        <key>line</key><integer>21</integer>
106 //CHECK:        <key>col</key><integer>5</integer>
107 //CHECK:        <key>file</key><integer>0</integer>
108 //CHECK:       </dict>
109 //CHECK:       <key>ranges</key>
110 //CHECK:       <array>
111 //CHECK:         <array>
112 //CHECK:          <dict>
113 //CHECK:           <key>line</key><integer>21</integer>
114 //CHECK:           <key>col</key><integer>5</integer>
115 //CHECK:           <key>file</key><integer>0</integer>
116 //CHECK:          </dict>
117 //CHECK:          <dict>
118 //CHECK:           <key>line</key><integer>21</integer>
119 //CHECK:           <key>col</key><integer>14</integer>
120 //CHECK:           <key>file</key><integer>0</integer>
121 //CHECK:          </dict>
122 //CHECK:         </array>
123 //CHECK:       </array>
124 //CHECK:       <key>depth</key><integer>0</integer>
125 //CHECK:       <key>extended_message</key>
126 //CHECK:       <string>Calling &apos;foo&apos;</string>
127 //CHECK:       <key>message</key>
128 //CHECK:  <string>Calling &apos;foo&apos;</string>
129 //CHECK:      </dict>
130 //CHECK:      <dict>
131 //CHECK:       <key>kind</key><string>event</string>
132 //CHECK:       <key>location</key>
133 //CHECK:       <dict>
134 //CHECK:        <key>line</key><integer>10</integer>
135 //CHECK:        <key>col</key><integer>1</integer>
136 //CHECK:        <key>file</key><integer>0</integer>
137 //CHECK:       </dict>
138 //CHECK:       <key>depth</key><integer>1</integer>
139 //CHECK:       <key>extended_message</key>
140 //CHECK:       <string>Entered call from &apos;use&apos;</string>
141 //CHECK:       <key>message</key>
142 //CHECK:  <string>Entered call from &apos;use&apos;</string>
143 //CHECK:      </dict>
144 //CHECK:      <dict>
145 //CHECK:       <key>kind</key><string>control</string>
146 //CHECK:       <key>edges</key>
147 //CHECK:        <array>
148 //CHECK:         <dict>
149 //CHECK:          <key>start</key>
150 //CHECK:           <array>
151 //CHECK:            <dict>
152 //CHECK:             <key>line</key><integer>10</integer>
153 //CHECK:             <key>col</key><integer>1</integer>
154 //CHECK:             <key>file</key><integer>0</integer>
155 //CHECK:            </dict>
156 //CHECK:            <dict>
157 //CHECK:             <key>line</key><integer>10</integer>
158 //CHECK:             <key>col</key><integer>4</integer>
159 //CHECK:             <key>file</key><integer>0</integer>
160 //CHECK:            </dict>
161 //CHECK:           </array>
162 //CHECK:          <key>end</key>
163 //CHECK:           <array>
164 //CHECK:            <dict>
165 //CHECK:             <key>line</key><integer>11</integer>
166 //CHECK:             <key>col</key><integer>5</integer>
167 //CHECK:             <key>file</key><integer>0</integer>
168 //CHECK:            </dict>
169 //CHECK:            <dict>
170 //CHECK:             <key>line</key><integer>11</integer>
171 //CHECK:             <key>col</key><integer>6</integer>
172 //CHECK:             <key>file</key><integer>0</integer>
173 //CHECK:            </dict>
174 //CHECK:           </array>
175 //CHECK:         </dict>
176 //CHECK:        </array>
177 //CHECK:      </dict>
178 //CHECK:      <dict>
179 //CHECK:       <key>kind</key><string>control</string>
180 //CHECK:       <key>edges</key>
181 //CHECK:        <array>
182 //CHECK:         <dict>
183 //CHECK:          <key>start</key>
184 //CHECK:           <array>
185 //CHECK:            <dict>
186 //CHECK:             <key>line</key><integer>11</integer>
187 //CHECK:             <key>col</key><integer>5</integer>
188 //CHECK:             <key>file</key><integer>0</integer>
189 //CHECK:            </dict>
190 //CHECK:            <dict>
191 //CHECK:             <key>line</key><integer>11</integer>
192 //CHECK:             <key>col</key><integer>6</integer>
193 //CHECK:             <key>file</key><integer>0</integer>
194 //CHECK:            </dict>
195 //CHECK:           </array>
196 //CHECK:          <key>end</key>
197 //CHECK:           <array>
198 //CHECK:            <dict>
199 //CHECK:             <key>line</key><integer>11</integer>
200 //CHECK:             <key>col</key><integer>9</integer>
201 //CHECK:             <key>file</key><integer>0</integer>
202 //CHECK:            </dict>
203 //CHECK:            <dict>
204 //CHECK:             <key>line</key><integer>11</integer>
205 //CHECK:             <key>col</key><integer>9</integer>
206 //CHECK:             <key>file</key><integer>0</integer>
207 //CHECK:            </dict>
208 //CHECK:           </array>
209 //CHECK:         </dict>
210 //CHECK:        </array>
211 //CHECK:      </dict>
212 //CHECK:      <dict>
213 //CHECK:       <key>kind</key><string>event</string>
214 //CHECK:       <key>location</key>
215 //CHECK:       <dict>
216 //CHECK:        <key>line</key><integer>11</integer>
217 //CHECK:        <key>col</key><integer>9</integer>
218 //CHECK:        <key>file</key><integer>0</integer>
219 //CHECK:       </dict>
220 //CHECK:       <key>ranges</key>
221 //CHECK:       <array>
222 //CHECK:         <array>
223 //CHECK:          <dict>
224 //CHECK:           <key>line</key><integer>11</integer>
225 //CHECK:           <key>col</key><integer>9</integer>
226 //CHECK:           <key>file</key><integer>0</integer>
227 //CHECK:          </dict>
228 //CHECK:          <dict>
229 //CHECK:           <key>line</key><integer>11</integer>
230 //CHECK:           <key>col</key><integer>9</integer>
231 //CHECK:           <key>file</key><integer>0</integer>
232 //CHECK:          </dict>
233 //CHECK:         </array>
234 //CHECK:       </array>
235 //CHECK:       <key>depth</key><integer>1</integer>
236 //CHECK:       <key>extended_message</key>
237 //CHECK:       <string>Assuming &apos;c&apos; is not equal to 0</string>
238 //CHECK:       <key>message</key>
239 //CHECK:  <string>Assuming &apos;c&apos; is not equal to 0</string>
240 //CHECK:      </dict>
241 //CHECK:      <dict>
242 //CHECK:       <key>kind</key><string>control</string>
243 //CHECK:       <key>edges</key>
244 //CHECK:        <array>
245 //CHECK:         <dict>
246 //CHECK:          <key>start</key>
247 //CHECK:           <array>
248 //CHECK:            <dict>
249 //CHECK:             <key>line</key><integer>11</integer>
250 //CHECK:             <key>col</key><integer>9</integer>
251 //CHECK:             <key>file</key><integer>0</integer>
252 //CHECK:            </dict>
253 //CHECK:            <dict>
254 //CHECK:             <key>line</key><integer>11</integer>
255 //CHECK:             <key>col</key><integer>9</integer>
256 //CHECK:             <key>file</key><integer>0</integer>
257 //CHECK:            </dict>
258 //CHECK:           </array>
259 //CHECK:          <key>end</key>
260 //CHECK:           <array>
261 //CHECK:            <dict>
262 //CHECK:             <key>line</key><integer>14</integer>
263 //CHECK:             <key>col</key><integer>9</integer>
264 //CHECK:             <key>file</key><integer>0</integer>
265 //CHECK:            </dict>
266 //CHECK:            <dict>
267 //CHECK:             <key>line</key><integer>14</integer>
268 //CHECK:             <key>col</key><integer>14</integer>
269 //CHECK:             <key>file</key><integer>0</integer>
270 //CHECK:            </dict>
271 //CHECK:           </array>
272 //CHECK:         </dict>
273 //CHECK:        </array>
274 //CHECK:      </dict>
275 //CHECK:      <dict>
276 //CHECK:       <key>kind</key><string>event</string>
277 //CHECK:       <key>location</key>
278 //CHECK:       <dict>
279 //CHECK:        <key>line</key><integer>21</integer>
280 //CHECK:        <key>col</key><integer>5</integer>
281 //CHECK:        <key>file</key><integer>0</integer>
282 //CHECK:       </dict>
283 //CHECK:       <key>ranges</key>
284 //CHECK:       <array>
285 //CHECK:         <array>
286 //CHECK:          <dict>
287 //CHECK:           <key>line</key><integer>21</integer>
288 //CHECK:           <key>col</key><integer>5</integer>
289 //CHECK:           <key>file</key><integer>0</integer>
290 //CHECK:          </dict>
291 //CHECK:          <dict>
292 //CHECK:           <key>line</key><integer>21</integer>
293 //CHECK:           <key>col</key><integer>14</integer>
294 //CHECK:           <key>file</key><integer>0</integer>
295 //CHECK:          </dict>
296 //CHECK:         </array>
297 //CHECK:       </array>
298 //CHECK:       <key>depth</key><integer>1</integer>
299 //CHECK:       <key>extended_message</key>
300 //CHECK:       <string>Returning from &apos;foo&apos;</string>
301 //CHECK:       <key>message</key>
302 //CHECK:  <string>Returning from &apos;foo&apos;</string>
303 //CHECK:      </dict>
304 //CHECK:      <dict>
305 //CHECK:       <key>kind</key><string>control</string>
306 //CHECK:       <key>edges</key>
307 //CHECK:        <array>
308 //CHECK:         <dict>
309 //CHECK:          <key>start</key>
310 //CHECK:           <array>
311 //CHECK:            <dict>
312 //CHECK:             <key>line</key><integer>21</integer>
313 //CHECK:             <key>col</key><integer>5</integer>
314 //CHECK:             <key>file</key><integer>0</integer>
315 //CHECK:            </dict>
316 //CHECK:            <dict>
317 //CHECK:             <key>line</key><integer>21</integer>
318 //CHECK:             <key>col</key><integer>7</integer>
319 //CHECK:             <key>file</key><integer>0</integer>
320 //CHECK:            </dict>
321 //CHECK:           </array>
322 //CHECK:          <key>end</key>
323 //CHECK:           <array>
324 //CHECK:            <dict>
325 //CHECK:             <key>line</key><integer>24</integer>
326 //CHECK:             <key>col</key><integer>5</integer>
327 //CHECK:             <key>file</key><integer>0</integer>
328 //CHECK:            </dict>
329 //CHECK:            <dict>
330 //CHECK:             <key>line</key><integer>24</integer>
331 //CHECK:             <key>col</key><integer>18</integer>
332 //CHECK:             <key>file</key><integer>0</integer>
333 //CHECK:            </dict>
334 //CHECK:           </array>
335 //CHECK:         </dict>
336 //CHECK:        </array>
337 //CHECK:      </dict>
338 //CHECK:      <dict>
339 //CHECK:       <key>kind</key><string>control</string>
340 //CHECK:       <key>edges</key>
341 //CHECK:        <array>
342 //CHECK:         <dict>
343 //CHECK:          <key>start</key>
344 //CHECK:           <array>
345 //CHECK:            <dict>
346 //CHECK:             <key>line</key><integer>24</integer>
347 //CHECK:             <key>col</key><integer>5</integer>
348 //CHECK:             <key>file</key><integer>0</integer>
349 //CHECK:            </dict>
350 //CHECK:            <dict>
351 //CHECK:             <key>line</key><integer>24</integer>
352 //CHECK:             <key>col</key><integer>18</integer>
353 //CHECK:             <key>file</key><integer>0</integer>
354 //CHECK:            </dict>
355 //CHECK:           </array>
356 //CHECK:          <key>end</key>
357 //CHECK:           <array>
358 //CHECK:            <dict>
359 //CHECK:             <key>line</key><integer>25</integer>
360 //CHECK:             <key>col</key><integer>5</integer>
361 //CHECK:             <key>file</key><integer>0</integer>
362 //CHECK:            </dict>
363 //CHECK:            <dict>
364 //CHECK:             <key>line</key><integer>25</integer>
365 //CHECK:             <key>col</key><integer>10</integer>
366 //CHECK:             <key>file</key><integer>0</integer>
367 //CHECK:            </dict>
368 //CHECK:           </array>
369 //CHECK:         </dict>
370 //CHECK:        </array>
371 //CHECK:      </dict>
372 //CHECK:      <dict>
373 //CHECK:       <key>kind</key><string>control</string>
374 //CHECK:       <key>edges</key>
375 //CHECK:        <array>
376 //CHECK:         <dict>
377 //CHECK:          <key>start</key>
378 //CHECK:           <array>
379 //CHECK:            <dict>
380 //CHECK:             <key>line</key><integer>25</integer>
381 //CHECK:             <key>col</key><integer>5</integer>
382 //CHECK:             <key>file</key><integer>0</integer>
383 //CHECK:            </dict>
384 //CHECK:            <dict>
385 //CHECK:             <key>line</key><integer>25</integer>
386 //CHECK:             <key>col</key><integer>10</integer>
387 //CHECK:             <key>file</key><integer>0</integer>
388 //CHECK:            </dict>
389 //CHECK:           </array>
390 //CHECK:          <key>end</key>
391 //CHECK:           <array>
392 //CHECK:            <dict>
393 //CHECK:             <key>line</key><integer>25</integer>
394 //CHECK:             <key>col</key><integer>12</integer>
395 //CHECK:             <key>file</key><integer>0</integer>
396 //CHECK:            </dict>
397 //CHECK:            <dict>
398 //CHECK:             <key>line</key><integer>25</integer>
399 //CHECK:             <key>col</key><integer>13</integer>
400 //CHECK:             <key>file</key><integer>0</integer>
401 //CHECK:            </dict>
402 //CHECK:           </array>
403 //CHECK:         </dict>
404 //CHECK:        </array>
405 //CHECK:      </dict>
406 //CHECK:      <dict>
407 //CHECK:       <key>kind</key><string>event</string>
408 //CHECK:       <key>location</key>
409 //CHECK:       <dict>
410 //CHECK:        <key>line</key><integer>25</integer>
411 //CHECK:        <key>col</key><integer>12</integer>
412 //CHECK:        <key>file</key><integer>0</integer>
413 //CHECK:       </dict>
414 //CHECK:       <key>ranges</key>
415 //CHECK:       <array>
416 //CHECK:         <array>
417 //CHECK:          <dict>
418 //CHECK:           <key>line</key><integer>25</integer>
419 //CHECK:           <key>col</key><integer>12</integer>
420 //CHECK:           <key>file</key><integer>0</integer>
421 //CHECK:          </dict>
422 //CHECK:          <dict>
423 //CHECK:           <key>line</key><integer>25</integer>
424 //CHECK:           <key>col</key><integer>13</integer>
425 //CHECK:           <key>file</key><integer>0</integer>
426 //CHECK:          </dict>
427 //CHECK:         </array>
428 //CHECK:       </array>
429 //CHECK:       <key>depth</key><integer>0</integer>
430 //CHECK:       <key>extended_message</key>
431 //CHECK:       <string>The left operand of &apos;+&apos; is a garbage value</string>
432 //CHECK:       <key>message</key>
433 //CHECK:  <string>The left operand of &apos;+&apos; is a garbage value</string>
434 //CHECK:      </dict>
435 //CHECK:     </array>
436 //CHECK:     <key>description</key><string>The left operand of &apos;+&apos; is a garbage value</string>
437 //CHECK:     <key>category</key><string>Logic error</string>
438 //CHECK:     <key>type</key><string>Result of operation is garbage or undefined</string>
439 //CHECK:    <key>issue_context_kind</key><string>function</string>
440 //CHECK:    <key>issue_context</key><string>use</string>
441 //CHECK:    <key>issue_hash</key><integer>7</integer>
442 //CHECK:    <key>location</key>
443 //CHECK:    <dict>
444 //CHECK:     <key>line</key><integer>25</integer>
445 //CHECK:     <key>col</key><integer>12</integer>
446 //CHECK:     <key>file</key><integer>0</integer>
447 //CHECK:    </dict>
448 //CHECK:    </dict>
449 //CHECK:   </array>
450 //CHECK:  </dict>
451 //CHECK:  </plist>
452