method-call-path-notes.cpp revision c47dc1b9734ea9bebb281499d58d22c2647713a9
1// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-ipa=inlining -analyzer-output=text -verify %s
2// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-ipa=inlining -analyzer-output=plist-multi-file %s -o - | FileCheck %s
3
4// Test warning about null or uninitialized pointer values used as instance member
5// calls.
6class TestInstanceCall {
7public:
8  void foo() {}
9};
10
11void test_ic() {
12  TestInstanceCall *p; // expected-note {{Variable 'p' declared without an initial value}}
13  p->foo(); // expected-warning {{Called C++ object pointer is uninitialized}} expected-note {{Called C++ object pointer is uninitialized}}
14}
15
16void test_ic_null() {
17  TestInstanceCall *p = 0; // expected-note {{Variable 'p' initialized to a null pointer value}}
18  p->foo(); // expected-warning {{Called C++ object pointer is null}} expected-note {{Called C++ object pointer is null}}
19}
20
21void test_ic_set_to_null() {
22  TestInstanceCall *p;
23  p = 0; // expected-note {{Null pointer value stored to 'p'}}
24  p->foo(); // expected-warning {{Called C++ object pointer is null}} expected-note {{Called C++ object pointer is null}}
25}
26
27void test_ic_null(TestInstanceCall *p) {
28  if (!p) // expected-note {{Assuming pointer value is null}} expected-note {{Assuming 'p' is null}} expected-note {{Taking true branch}}
29    p->foo(); // expected-warning {{Called C++ object pointer is null}} expected-note{{Called C++ object pointer is null}}
30}
31
32void test_ic_member_ptr() {
33  TestInstanceCall *p = 0; // expected-note {{Variable 'p' initialized to a null pointer value}}
34  typedef void (TestInstanceCall::*IC_Ptr)();
35  IC_Ptr bar = &TestInstanceCall::foo;
36  (p->*bar)(); // expected-warning {{Called C++ object pointer is null}} expected-note{{Called C++ object pointer is null}}
37}
38
39void test_cast(const TestInstanceCall *p) {
40  if (!p) // expected-note {{Assuming pointer value is null}} expected-note {{Assuming 'p' is null}} expected-note {{Taking true branch}}
41    const_cast<TestInstanceCall *>(p)->foo(); // expected-warning {{Called C++ object pointer is null}} expected-note {{Called C++ object pointer is null}}
42}
43
44// CHECK: <?xml version="1.0" encoding="UTF-8"?>
45// CHECK: <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
46// CHECK: <plist version="1.0">
47// CHECK: <dict>
48// CHECK:  <key>files</key>
49// CHECK:  <array>
50// CHECK:   <string>{{.*}}method-call-path-notes.cpp</string>
51// CHECK:  </array>
52// CHECK:  <key>diagnostics</key>
53// CHECK:  <array>
54// CHECK:   <dict>
55// CHECK:    <key>path</key>
56// CHECK:    <array>
57// CHECK:     <dict>
58// CHECK:      <key>kind</key><string>event</string>
59// CHECK:      <key>location</key>
60// CHECK:      <dict>
61// CHECK:       <key>line</key><integer>12</integer>
62// CHECK:       <key>col</key><integer>3</integer>
63// CHECK:       <key>file</key><integer>0</integer>
64// CHECK:      </dict>
65// CHECK:      <key>ranges</key>
66// CHECK:      <array>
67// CHECK:        <array>
68// CHECK:         <dict>
69// CHECK:          <key>line</key><integer>12</integer>
70// CHECK:          <key>col</key><integer>3</integer>
71// CHECK:          <key>file</key><integer>0</integer>
72// CHECK:         </dict>
73// CHECK:         <dict>
74// CHECK:          <key>line</key><integer>12</integer>
75// CHECK:          <key>col</key><integer>21</integer>
76// CHECK:          <key>file</key><integer>0</integer>
77// CHECK:         </dict>
78// CHECK:        </array>
79// CHECK:      </array>
80// CHECK:      <key>depth</key><integer>0</integer>
81// CHECK:      <key>extended_message</key>
82// CHECK:      <string>Variable &apos;p&apos; declared without an initial value</string>
83// CHECK:      <key>message</key>
84// CHECK: <string>Variable &apos;p&apos; declared without an initial value</string>
85// CHECK:     </dict>
86// CHECK:     <dict>
87// CHECK:      <key>kind</key><string>control</string>
88// CHECK:      <key>edges</key>
89// CHECK:       <array>
90// CHECK:        <dict>
91// CHECK:         <key>start</key>
92// CHECK:          <array>
93// CHECK:           <dict>
94// CHECK:            <key>line</key><integer>12</integer>
95// CHECK:            <key>col</key><integer>3</integer>
96// CHECK:            <key>file</key><integer>0</integer>
97// CHECK:           </dict>
98// CHECK:           <dict>
99// CHECK:            <key>line</key><integer>12</integer>
100// CHECK:            <key>col</key><integer>18</integer>
101// CHECK:            <key>file</key><integer>0</integer>
102// CHECK:           </dict>
103// CHECK:          </array>
104// CHECK:         <key>end</key>
105// CHECK:          <array>
106// CHECK:           <dict>
107// CHECK:            <key>line</key><integer>13</integer>
108// CHECK:            <key>col</key><integer>3</integer>
109// CHECK:            <key>file</key><integer>0</integer>
110// CHECK:           </dict>
111// CHECK:           <dict>
112// CHECK:            <key>line</key><integer>13</integer>
113// CHECK:            <key>col</key><integer>3</integer>
114// CHECK:            <key>file</key><integer>0</integer>
115// CHECK:           </dict>
116// CHECK:          </array>
117// CHECK:        </dict>
118// CHECK:       </array>
119// CHECK:     </dict>
120// CHECK:     <dict>
121// CHECK:      <key>kind</key><string>event</string>
122// CHECK:      <key>location</key>
123// CHECK:      <dict>
124// CHECK:       <key>line</key><integer>13</integer>
125// CHECK:       <key>col</key><integer>3</integer>
126// CHECK:       <key>file</key><integer>0</integer>
127// CHECK:      </dict>
128// CHECK:      <key>ranges</key>
129// CHECK:      <array>
130// CHECK:        <array>
131// CHECK:         <dict>
132// CHECK:          <key>line</key><integer>13</integer>
133// CHECK:          <key>col</key><integer>3</integer>
134// CHECK:          <key>file</key><integer>0</integer>
135// CHECK:         </dict>
136// CHECK:         <dict>
137// CHECK:          <key>line</key><integer>13</integer>
138// CHECK:          <key>col</key><integer>3</integer>
139// CHECK:          <key>file</key><integer>0</integer>
140// CHECK:         </dict>
141// CHECK:        </array>
142// CHECK:      </array>
143// CHECK:      <key>depth</key><integer>0</integer>
144// CHECK:      <key>extended_message</key>
145// CHECK:      <string>Called C++ object pointer is uninitialized</string>
146// CHECK:      <key>message</key>
147// CHECK: <string>Called C++ object pointer is uninitialized</string>
148// CHECK:     </dict>
149// CHECK:    </array>
150// CHECK:    <key>description</key><string>Called C++ object pointer is uninitialized</string>
151// CHECK:    <key>category</key><string>Logic error</string>
152// CHECK:    <key>type</key><string>Called C++ object pointer is uninitialized</string>
153// CHECK:   <key>issue_context_kind</key><string>function</string>
154// CHECK:   <key>issue_context</key><string>test_ic</string>
155// CHECK:   <key>issue_hash</key><integer>2</integer>
156// CHECK:   <key>location</key>
157// CHECK:   <dict>
158// CHECK:    <key>line</key><integer>13</integer>
159// CHECK:    <key>col</key><integer>3</integer>
160// CHECK:    <key>file</key><integer>0</integer>
161// CHECK:   </dict>
162// CHECK:   </dict>
163// CHECK:   <dict>
164// CHECK:    <key>path</key>
165// CHECK:    <array>
166// CHECK:     <dict>
167// CHECK:      <key>kind</key><string>event</string>
168// CHECK:      <key>location</key>
169// CHECK:      <dict>
170// CHECK:       <key>line</key><integer>17</integer>
171// CHECK:       <key>col</key><integer>3</integer>
172// CHECK:       <key>file</key><integer>0</integer>
173// CHECK:      </dict>
174// CHECK:      <key>ranges</key>
175// CHECK:      <array>
176// CHECK:        <array>
177// CHECK:         <dict>
178// CHECK:          <key>line</key><integer>17</integer>
179// CHECK:          <key>col</key><integer>3</integer>
180// CHECK:          <key>file</key><integer>0</integer>
181// CHECK:         </dict>
182// CHECK:         <dict>
183// CHECK:          <key>line</key><integer>17</integer>
184// CHECK:          <key>col</key><integer>21</integer>
185// CHECK:          <key>file</key><integer>0</integer>
186// CHECK:         </dict>
187// CHECK:        </array>
188// CHECK:      </array>
189// CHECK:      <key>depth</key><integer>0</integer>
190// CHECK:      <key>extended_message</key>
191// CHECK:      <string>Variable &apos;p&apos; initialized to a null pointer value</string>
192// CHECK:      <key>message</key>
193// CHECK: <string>Variable &apos;p&apos; initialized to a null pointer value</string>
194// CHECK:     </dict>
195// CHECK:     <dict>
196// CHECK:      <key>kind</key><string>control</string>
197// CHECK:      <key>edges</key>
198// CHECK:       <array>
199// CHECK:        <dict>
200// CHECK:         <key>start</key>
201// CHECK:          <array>
202// CHECK:           <dict>
203// CHECK:            <key>line</key><integer>17</integer>
204// CHECK:            <key>col</key><integer>3</integer>
205// CHECK:            <key>file</key><integer>0</integer>
206// CHECK:           </dict>
207// CHECK:           <dict>
208// CHECK:            <key>line</key><integer>17</integer>
209// CHECK:            <key>col</key><integer>18</integer>
210// CHECK:            <key>file</key><integer>0</integer>
211// CHECK:           </dict>
212// CHECK:          </array>
213// CHECK:         <key>end</key>
214// CHECK:          <array>
215// CHECK:           <dict>
216// CHECK:            <key>line</key><integer>18</integer>
217// CHECK:            <key>col</key><integer>3</integer>
218// CHECK:            <key>file</key><integer>0</integer>
219// CHECK:           </dict>
220// CHECK:           <dict>
221// CHECK:            <key>line</key><integer>18</integer>
222// CHECK:            <key>col</key><integer>3</integer>
223// CHECK:            <key>file</key><integer>0</integer>
224// CHECK:           </dict>
225// CHECK:          </array>
226// CHECK:        </dict>
227// CHECK:       </array>
228// CHECK:     </dict>
229// CHECK:     <dict>
230// CHECK:      <key>kind</key><string>event</string>
231// CHECK:      <key>location</key>
232// CHECK:      <dict>
233// CHECK:       <key>line</key><integer>18</integer>
234// CHECK:       <key>col</key><integer>3</integer>
235// CHECK:       <key>file</key><integer>0</integer>
236// CHECK:      </dict>
237// CHECK:      <key>ranges</key>
238// CHECK:      <array>
239// CHECK:        <array>
240// CHECK:         <dict>
241// CHECK:          <key>line</key><integer>18</integer>
242// CHECK:          <key>col</key><integer>3</integer>
243// CHECK:          <key>file</key><integer>0</integer>
244// CHECK:         </dict>
245// CHECK:         <dict>
246// CHECK:          <key>line</key><integer>18</integer>
247// CHECK:          <key>col</key><integer>3</integer>
248// CHECK:          <key>file</key><integer>0</integer>
249// CHECK:         </dict>
250// CHECK:        </array>
251// CHECK:      </array>
252// CHECK:      <key>depth</key><integer>0</integer>
253// CHECK:      <key>extended_message</key>
254// CHECK:      <string>Called C++ object pointer is null</string>
255// CHECK:      <key>message</key>
256// CHECK: <string>Called C++ object pointer is null</string>
257// CHECK:     </dict>
258// CHECK:    </array>
259// CHECK:    <key>description</key><string>Called C++ object pointer is null</string>
260// CHECK:    <key>category</key><string>Logic error</string>
261// CHECK:    <key>type</key><string>Called C++ object pointer is null</string>
262// CHECK:   <key>issue_context_kind</key><string>function</string>
263// CHECK:   <key>issue_context</key><string>test_ic_null</string>
264// CHECK:   <key>issue_hash</key><integer>2</integer>
265// CHECK:   <key>location</key>
266// CHECK:   <dict>
267// CHECK:    <key>line</key><integer>18</integer>
268// CHECK:    <key>col</key><integer>3</integer>
269// CHECK:    <key>file</key><integer>0</integer>
270// CHECK:   </dict>
271// CHECK:   </dict>
272// CHECK:   <dict>
273// CHECK:    <key>path</key>
274// CHECK:    <array>
275// CHECK:     <dict>
276// CHECK:      <key>kind</key><string>control</string>
277// CHECK:      <key>edges</key>
278// CHECK:       <array>
279// CHECK:        <dict>
280// CHECK:         <key>start</key>
281// CHECK:          <array>
282// CHECK:           <dict>
283// CHECK:            <key>line</key><integer>22</integer>
284// CHECK:            <key>col</key><integer>3</integer>
285// CHECK:            <key>file</key><integer>0</integer>
286// CHECK:           </dict>
287// CHECK:           <dict>
288// CHECK:            <key>line</key><integer>22</integer>
289// CHECK:            <key>col</key><integer>18</integer>
290// CHECK:            <key>file</key><integer>0</integer>
291// CHECK:           </dict>
292// CHECK:          </array>
293// CHECK:         <key>end</key>
294// CHECK:          <array>
295// CHECK:           <dict>
296// CHECK:            <key>line</key><integer>23</integer>
297// CHECK:            <key>col</key><integer>3</integer>
298// CHECK:            <key>file</key><integer>0</integer>
299// CHECK:           </dict>
300// CHECK:           <dict>
301// CHECK:            <key>line</key><integer>23</integer>
302// CHECK:            <key>col</key><integer>3</integer>
303// CHECK:            <key>file</key><integer>0</integer>
304// CHECK:           </dict>
305// CHECK:          </array>
306// CHECK:        </dict>
307// CHECK:       </array>
308// CHECK:     </dict>
309// CHECK:     <dict>
310// CHECK:      <key>kind</key><string>event</string>
311// CHECK:      <key>location</key>
312// CHECK:      <dict>
313// CHECK:       <key>line</key><integer>23</integer>
314// CHECK:       <key>col</key><integer>3</integer>
315// CHECK:       <key>file</key><integer>0</integer>
316// CHECK:      </dict>
317// CHECK:      <key>ranges</key>
318// CHECK:      <array>
319// CHECK:        <array>
320// CHECK:         <dict>
321// CHECK:          <key>line</key><integer>23</integer>
322// CHECK:          <key>col</key><integer>3</integer>
323// CHECK:          <key>file</key><integer>0</integer>
324// CHECK:         </dict>
325// CHECK:         <dict>
326// CHECK:          <key>line</key><integer>23</integer>
327// CHECK:          <key>col</key><integer>7</integer>
328// CHECK:          <key>file</key><integer>0</integer>
329// CHECK:         </dict>
330// CHECK:        </array>
331// CHECK:      </array>
332// CHECK:      <key>depth</key><integer>0</integer>
333// CHECK:      <key>extended_message</key>
334// CHECK:      <string>Null pointer value stored to &apos;p&apos;</string>
335// CHECK:      <key>message</key>
336// CHECK: <string>Null pointer value stored to &apos;p&apos;</string>
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>23</integer>
347// CHECK:            <key>col</key><integer>3</integer>
348// CHECK:            <key>file</key><integer>0</integer>
349// CHECK:           </dict>
350// CHECK:           <dict>
351// CHECK:            <key>line</key><integer>23</integer>
352// CHECK:            <key>col</key><integer>3</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>24</integer>
360// CHECK:            <key>col</key><integer>3</integer>
361// CHECK:            <key>file</key><integer>0</integer>
362// CHECK:           </dict>
363// CHECK:           <dict>
364// CHECK:            <key>line</key><integer>24</integer>
365// CHECK:            <key>col</key><integer>3</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>event</string>
374// CHECK:      <key>location</key>
375// CHECK:      <dict>
376// CHECK:       <key>line</key><integer>24</integer>
377// CHECK:       <key>col</key><integer>3</integer>
378// CHECK:       <key>file</key><integer>0</integer>
379// CHECK:      </dict>
380// CHECK:      <key>ranges</key>
381// CHECK:      <array>
382// CHECK:        <array>
383// CHECK:         <dict>
384// CHECK:          <key>line</key><integer>24</integer>
385// CHECK:          <key>col</key><integer>3</integer>
386// CHECK:          <key>file</key><integer>0</integer>
387// CHECK:         </dict>
388// CHECK:         <dict>
389// CHECK:          <key>line</key><integer>24</integer>
390// CHECK:          <key>col</key><integer>3</integer>
391// CHECK:          <key>file</key><integer>0</integer>
392// CHECK:         </dict>
393// CHECK:        </array>
394// CHECK:      </array>
395// CHECK:      <key>depth</key><integer>0</integer>
396// CHECK:      <key>extended_message</key>
397// CHECK:      <string>Called C++ object pointer is null</string>
398// CHECK:      <key>message</key>
399// CHECK: <string>Called C++ object pointer is null</string>
400// CHECK:     </dict>
401// CHECK:    </array>
402// CHECK:    <key>description</key><string>Called C++ object pointer is null</string>
403// CHECK:    <key>category</key><string>Logic error</string>
404// CHECK:    <key>type</key><string>Called C++ object pointer is null</string>
405// CHECK:   <key>issue_context_kind</key><string>function</string>
406// CHECK:   <key>issue_context</key><string>test_ic_set_to_null</string>
407// CHECK:   <key>issue_hash</key><integer>3</integer>
408// CHECK:   <key>location</key>
409// CHECK:   <dict>
410// CHECK:    <key>line</key><integer>24</integer>
411// CHECK:    <key>col</key><integer>3</integer>
412// CHECK:    <key>file</key><integer>0</integer>
413// CHECK:   </dict>
414// CHECK:   </dict>
415// CHECK:   <dict>
416// CHECK:    <key>path</key>
417// CHECK:    <array>
418// CHECK:     <dict>
419// CHECK:      <key>kind</key><string>control</string>
420// CHECK:      <key>edges</key>
421// CHECK:       <array>
422// CHECK:        <dict>
423// CHECK:         <key>start</key>
424// CHECK:          <array>
425// CHECK:           <dict>
426// CHECK:            <key>line</key><integer>28</integer>
427// CHECK:            <key>col</key><integer>3</integer>
428// CHECK:            <key>file</key><integer>0</integer>
429// CHECK:           </dict>
430// CHECK:           <dict>
431// CHECK:            <key>line</key><integer>28</integer>
432// CHECK:            <key>col</key><integer>4</integer>
433// CHECK:            <key>file</key><integer>0</integer>
434// CHECK:           </dict>
435// CHECK:          </array>
436// CHECK:         <key>end</key>
437// CHECK:          <array>
438// CHECK:           <dict>
439// CHECK:            <key>line</key><integer>28</integer>
440// CHECK:            <key>col</key><integer>7</integer>
441// CHECK:            <key>file</key><integer>0</integer>
442// CHECK:           </dict>
443// CHECK:           <dict>
444// CHECK:            <key>line</key><integer>28</integer>
445// CHECK:            <key>col</key><integer>7</integer>
446// CHECK:            <key>file</key><integer>0</integer>
447// CHECK:           </dict>
448// CHECK:          </array>
449// CHECK:        </dict>
450// CHECK:       </array>
451// CHECK:     </dict>
452// CHECK:     <dict>
453// CHECK:      <key>kind</key><string>event</string>
454// CHECK:      <key>location</key>
455// CHECK:      <dict>
456// CHECK:       <key>line</key><integer>28</integer>
457// CHECK:       <key>col</key><integer>7</integer>
458// CHECK:       <key>file</key><integer>0</integer>
459// CHECK:      </dict>
460// CHECK:      <key>ranges</key>
461// CHECK:      <array>
462// CHECK:        <array>
463// CHECK:         <dict>
464// CHECK:          <key>line</key><integer>28</integer>
465// CHECK:          <key>col</key><integer>7</integer>
466// CHECK:          <key>file</key><integer>0</integer>
467// CHECK:         </dict>
468// CHECK:         <dict>
469// CHECK:          <key>line</key><integer>28</integer>
470// CHECK:          <key>col</key><integer>8</integer>
471// CHECK:          <key>file</key><integer>0</integer>
472// CHECK:         </dict>
473// CHECK:        </array>
474// CHECK:      </array>
475// CHECK:      <key>depth</key><integer>0</integer>
476// CHECK:      <key>extended_message</key>
477// CHECK:      <string>Assuming pointer value is null</string>
478// CHECK:      <key>message</key>
479// CHECK: <string>Assuming pointer value is null</string>
480// CHECK:     </dict>
481// CHECK:     <dict>
482// CHECK:      <key>kind</key><string>control</string>
483// CHECK:      <key>edges</key>
484// CHECK:       <array>
485// CHECK:        <dict>
486// CHECK:         <key>start</key>
487// CHECK:          <array>
488// CHECK:           <dict>
489// CHECK:            <key>line</key><integer>28</integer>
490// CHECK:            <key>col</key><integer>7</integer>
491// CHECK:            <key>file</key><integer>0</integer>
492// CHECK:           </dict>
493// CHECK:           <dict>
494// CHECK:            <key>line</key><integer>28</integer>
495// CHECK:            <key>col</key><integer>7</integer>
496// CHECK:            <key>file</key><integer>0</integer>
497// CHECK:           </dict>
498// CHECK:          </array>
499// CHECK:         <key>end</key>
500// CHECK:          <array>
501// CHECK:           <dict>
502// CHECK:            <key>line</key><integer>29</integer>
503// CHECK:            <key>col</key><integer>5</integer>
504// CHECK:            <key>file</key><integer>0</integer>
505// CHECK:           </dict>
506// CHECK:           <dict>
507// CHECK:            <key>line</key><integer>29</integer>
508// CHECK:            <key>col</key><integer>5</integer>
509// CHECK:            <key>file</key><integer>0</integer>
510// CHECK:           </dict>
511// CHECK:          </array>
512// CHECK:        </dict>
513// CHECK:       </array>
514// CHECK:     </dict>
515// CHECK:     <dict>
516// CHECK:      <key>kind</key><string>event</string>
517// CHECK:      <key>location</key>
518// CHECK:      <dict>
519// CHECK:       <key>line</key><integer>29</integer>
520// CHECK:       <key>col</key><integer>5</integer>
521// CHECK:       <key>file</key><integer>0</integer>
522// CHECK:      </dict>
523// CHECK:      <key>ranges</key>
524// CHECK:      <array>
525// CHECK:        <array>
526// CHECK:         <dict>
527// CHECK:          <key>line</key><integer>29</integer>
528// CHECK:          <key>col</key><integer>5</integer>
529// CHECK:          <key>file</key><integer>0</integer>
530// CHECK:         </dict>
531// CHECK:         <dict>
532// CHECK:          <key>line</key><integer>29</integer>
533// CHECK:          <key>col</key><integer>5</integer>
534// CHECK:          <key>file</key><integer>0</integer>
535// CHECK:         </dict>
536// CHECK:        </array>
537// CHECK:      </array>
538// CHECK:      <key>depth</key><integer>0</integer>
539// CHECK:      <key>extended_message</key>
540// CHECK:      <string>Called C++ object pointer is null</string>
541// CHECK:      <key>message</key>
542// CHECK: <string>Called C++ object pointer is null</string>
543// CHECK:     </dict>
544// CHECK:    </array>
545// CHECK:    <key>description</key><string>Called C++ object pointer is null</string>
546// CHECK:    <key>category</key><string>Logic error</string>
547// CHECK:    <key>type</key><string>Called C++ object pointer is null</string>
548// CHECK:   <key>issue_context_kind</key><string>function</string>
549// CHECK:   <key>issue_context</key><string>test_ic_null</string>
550// CHECK:   <key>issue_hash</key><integer>2</integer>
551// CHECK:   <key>location</key>
552// CHECK:   <dict>
553// CHECK:    <key>line</key><integer>29</integer>
554// CHECK:    <key>col</key><integer>5</integer>
555// CHECK:    <key>file</key><integer>0</integer>
556// CHECK:   </dict>
557// CHECK:   </dict>
558// CHECK:   <dict>
559// CHECK:    <key>path</key>
560// CHECK:    <array>
561// CHECK:     <dict>
562// CHECK:      <key>kind</key><string>event</string>
563// CHECK:      <key>location</key>
564// CHECK:      <dict>
565// CHECK:       <key>line</key><integer>33</integer>
566// CHECK:       <key>col</key><integer>3</integer>
567// CHECK:       <key>file</key><integer>0</integer>
568// CHECK:      </dict>
569// CHECK:      <key>ranges</key>
570// CHECK:      <array>
571// CHECK:        <array>
572// CHECK:         <dict>
573// CHECK:          <key>line</key><integer>33</integer>
574// CHECK:          <key>col</key><integer>3</integer>
575// CHECK:          <key>file</key><integer>0</integer>
576// CHECK:         </dict>
577// CHECK:         <dict>
578// CHECK:          <key>line</key><integer>33</integer>
579// CHECK:          <key>col</key><integer>21</integer>
580// CHECK:          <key>file</key><integer>0</integer>
581// CHECK:         </dict>
582// CHECK:        </array>
583// CHECK:      </array>
584// CHECK:      <key>depth</key><integer>0</integer>
585// CHECK:      <key>extended_message</key>
586// CHECK:      <string>Variable &apos;p&apos; initialized to a null pointer value</string>
587// CHECK:      <key>message</key>
588// CHECK: <string>Variable &apos;p&apos; initialized to a null pointer value</string>
589// CHECK:     </dict>
590// CHECK:     <dict>
591// CHECK:      <key>kind</key><string>control</string>
592// CHECK:      <key>edges</key>
593// CHECK:       <array>
594// CHECK:        <dict>
595// CHECK:         <key>start</key>
596// CHECK:          <array>
597// CHECK:           <dict>
598// CHECK:            <key>line</key><integer>33</integer>
599// CHECK:            <key>col</key><integer>3</integer>
600// CHECK:            <key>file</key><integer>0</integer>
601// CHECK:           </dict>
602// CHECK:           <dict>
603// CHECK:            <key>line</key><integer>33</integer>
604// CHECK:            <key>col</key><integer>18</integer>
605// CHECK:            <key>file</key><integer>0</integer>
606// CHECK:           </dict>
607// CHECK:          </array>
608// CHECK:         <key>end</key>
609// CHECK:          <array>
610// CHECK:           <dict>
611// CHECK:            <key>line</key><integer>36</integer>
612// CHECK:            <key>col</key><integer>3</integer>
613// CHECK:            <key>file</key><integer>0</integer>
614// CHECK:           </dict>
615// CHECK:           <dict>
616// CHECK:            <key>line</key><integer>36</integer>
617// CHECK:            <key>col</key><integer>3</integer>
618// CHECK:            <key>file</key><integer>0</integer>
619// CHECK:           </dict>
620// CHECK:          </array>
621// CHECK:        </dict>
622// CHECK:       </array>
623// CHECK:     </dict>
624// CHECK:     <dict>
625// CHECK:      <key>kind</key><string>event</string>
626// CHECK:      <key>location</key>
627// CHECK:      <dict>
628// CHECK:       <key>line</key><integer>36</integer>
629// CHECK:       <key>col</key><integer>3</integer>
630// CHECK:       <key>file</key><integer>0</integer>
631// CHECK:      </dict>
632// CHECK:      <key>ranges</key>
633// CHECK:      <array>
634// CHECK:        <array>
635// CHECK:         <dict>
636// CHECK:          <key>line</key><integer>36</integer>
637// CHECK:          <key>col</key><integer>4</integer>
638// CHECK:          <key>file</key><integer>0</integer>
639// CHECK:         </dict>
640// CHECK:         <dict>
641// CHECK:          <key>line</key><integer>36</integer>
642// CHECK:          <key>col</key><integer>4</integer>
643// CHECK:          <key>file</key><integer>0</integer>
644// CHECK:         </dict>
645// CHECK:        </array>
646// CHECK:      </array>
647// CHECK:      <key>depth</key><integer>0</integer>
648// CHECK:      <key>extended_message</key>
649// CHECK:      <string>Called C++ object pointer is null</string>
650// CHECK:      <key>message</key>
651// CHECK: <string>Called C++ object pointer is null</string>
652// CHECK:     </dict>
653// CHECK:    </array>
654// CHECK:    <key>description</key><string>Called C++ object pointer is null</string>
655// CHECK:    <key>category</key><string>Logic error</string>
656// CHECK:    <key>type</key><string>Called C++ object pointer is null</string>
657// CHECK:   <key>issue_context_kind</key><string>function</string>
658// CHECK:   <key>issue_context</key><string>test_ic_member_ptr</string>
659// CHECK:   <key>issue_hash</key><integer>4</integer>
660// CHECK:   <key>location</key>
661// CHECK:   <dict>
662// CHECK:    <key>line</key><integer>36</integer>
663// CHECK:    <key>col</key><integer>3</integer>
664// CHECK:    <key>file</key><integer>0</integer>
665// CHECK:   </dict>
666// CHECK:   </dict>
667// CHECK:   <dict>
668// CHECK:    <key>path</key>
669// CHECK:    <array>
670// CHECK:     <dict>
671// CHECK:      <key>kind</key><string>control</string>
672// CHECK:      <key>edges</key>
673// CHECK:       <array>
674// CHECK:        <dict>
675// CHECK:         <key>start</key>
676// CHECK:          <array>
677// CHECK:           <dict>
678// CHECK:            <key>line</key><integer>40</integer>
679// CHECK:            <key>col</key><integer>3</integer>
680// CHECK:            <key>file</key><integer>0</integer>
681// CHECK:           </dict>
682// CHECK:           <dict>
683// CHECK:            <key>line</key><integer>40</integer>
684// CHECK:            <key>col</key><integer>4</integer>
685// CHECK:            <key>file</key><integer>0</integer>
686// CHECK:           </dict>
687// CHECK:          </array>
688// CHECK:         <key>end</key>
689// CHECK:          <array>
690// CHECK:           <dict>
691// CHECK:            <key>line</key><integer>41</integer>
692// CHECK:            <key>col</key><integer>5</integer>
693// CHECK:            <key>file</key><integer>0</integer>
694// CHECK:           </dict>
695// CHECK:           <dict>
696// CHECK:            <key>line</key><integer>41</integer>
697// CHECK:            <key>col</key><integer>14</integer>
698// CHECK:            <key>file</key><integer>0</integer>
699// CHECK:           </dict>
700// CHECK:          </array>
701// CHECK:        </dict>
702// CHECK:       </array>
703// CHECK:     </dict>
704// CHECK:     <dict>
705// CHECK:      <key>kind</key><string>event</string>
706// CHECK:      <key>location</key>
707// CHECK:      <dict>
708// CHECK:       <key>line</key><integer>41</integer>
709// CHECK:       <key>col</key><integer>5</integer>
710// CHECK:       <key>file</key><integer>0</integer>
711// CHECK:      </dict>
712// CHECK:      <key>ranges</key>
713// CHECK:      <array>
714// CHECK:        <array>
715// CHECK:         <dict>
716// CHECK:          <key>line</key><integer>41</integer>
717// CHECK:          <key>col</key><integer>5</integer>
718// CHECK:          <key>file</key><integer>0</integer>
719// CHECK:         </dict>
720// CHECK:         <dict>
721// CHECK:          <key>line</key><integer>41</integer>
722// CHECK:          <key>col</key><integer>37</integer>
723// CHECK:          <key>file</key><integer>0</integer>
724// CHECK:         </dict>
725// CHECK:        </array>
726// CHECK:      </array>
727// CHECK:      <key>depth</key><integer>0</integer>
728// CHECK:      <key>extended_message</key>
729// CHECK:      <string>Called C++ object pointer is null</string>
730// CHECK:      <key>message</key>
731// CHECK: <string>Called C++ object pointer is null</string>
732// CHECK:     </dict>
733// CHECK:    </array>
734// CHECK:    <key>description</key><string>Called C++ object pointer is null</string>
735// CHECK:    <key>category</key><string>Logic error</string>
736// CHECK:    <key>type</key><string>Called C++ object pointer is null</string>
737// CHECK:   <key>issue_context_kind</key><string>function</string>
738// CHECK:   <key>issue_context</key><string>test_cast</string>
739// CHECK:   <key>issue_hash</key><integer>2</integer>
740// CHECK:   <key>location</key>
741// CHECK:   <dict>
742// CHECK:    <key>line</key><integer>41</integer>
743// CHECK:    <key>col</key><integer>5</integer>
744// CHECK:    <key>file</key><integer>0</integer>
745// CHECK:   </dict>
746// CHECK:   </dict>
747// CHECK:  </array>
748// CHECK: </dict>
749// CHECK: </plist>
750