xref: /minix3/external/bsd/llvm/dist/clang/test/Analysis/inlining/eager-reclamation-path-notes.cpp (revision f4a2713ac843a11c696ec80c0a5e3e5d80b4d338)
1*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -analyzer-config graph-trim-interval=5 -analyzer-config suppress-null-return-paths=false -verify %s
2*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config graph-trim-interval=5 -analyzer-config suppress-null-return-paths=false -analyzer-config path-diagnostics-alternate=false %s -o %t.plist
3*f4a2713aSLionel Sambuc // RUN: FileCheck --input-file=%t.plist %s
4*f4a2713aSLionel Sambuc 
5*f4a2713aSLionel Sambuc typedef struct {
6*f4a2713aSLionel Sambuc   int getValue();
7*f4a2713aSLionel Sambuc } IntWrapper;
8*f4a2713aSLionel Sambuc 
getNullWrapper()9*f4a2713aSLionel Sambuc IntWrapper *getNullWrapper() {
10*f4a2713aSLionel Sambuc   return 0;
11*f4a2713aSLionel Sambuc   // expected-note@-1 {{Returning null pointer}}
12*f4a2713aSLionel Sambuc }
13*f4a2713aSLionel Sambuc 
memberCallBaseDisappears()14*f4a2713aSLionel Sambuc int memberCallBaseDisappears() {
15*f4a2713aSLionel Sambuc   // In this case, we need the lvalue-to-rvalue cast for 'ptr' to disappear,
16*f4a2713aSLionel Sambuc   // which means we need to trigger reclamation between that and the ->
17*f4a2713aSLionel Sambuc   // operator.
18*f4a2713aSLionel Sambuc   //
19*f4a2713aSLionel Sambuc   // Note that this test is EXTREMELY brittle because it's a negative test:
20*f4a2713aSLionel Sambuc   // we want to show that even if the node for the rvalue of 'ptr' disappears,
21*f4a2713aSLionel Sambuc   // we get the same results as if it doesn't. The test should never fail even
22*f4a2713aSLionel Sambuc   // if our node reclamation policy changes, but it could easily not be testing
23*f4a2713aSLionel Sambuc   // anything at that point.
24*f4a2713aSLionel Sambuc   IntWrapper *ptr = getNullWrapper();
25*f4a2713aSLionel Sambuc   // expected-note@-1 {{Calling 'getNullWrapper'}}
26*f4a2713aSLionel Sambuc   // expected-note@-2 {{Returning from 'getNullWrapper'}}
27*f4a2713aSLionel Sambuc   // expected-note@-3 {{'ptr' initialized to a null pointer value}}
28*f4a2713aSLionel Sambuc 
29*f4a2713aSLionel Sambuc   // Burn some nodes to trigger reclamation.
30*f4a2713aSLionel Sambuc   int unused = 1;
31*f4a2713aSLionel Sambuc   (void)unused;
32*f4a2713aSLionel Sambuc 
33*f4a2713aSLionel Sambuc   return ptr->getValue(); // expected-warning {{Called C++ object pointer is null}}
34*f4a2713aSLionel Sambuc   // expected-note@-1 {{Called C++ object pointer is null}}
35*f4a2713aSLionel Sambuc }
36*f4a2713aSLionel Sambuc 
37*f4a2713aSLionel Sambuc // CHECK:  <key>diagnostics</key>
38*f4a2713aSLionel Sambuc // CHECK-NEXT:  <array>
39*f4a2713aSLionel Sambuc // CHECK-NEXT:   <dict>
40*f4a2713aSLionel Sambuc // CHECK-NEXT:    <key>path</key>
41*f4a2713aSLionel Sambuc // CHECK-NEXT:    <array>
42*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
43*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>control</string>
44*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>edges</key>
45*f4a2713aSLionel Sambuc // CHECK-NEXT:       <array>
46*f4a2713aSLionel Sambuc // CHECK-NEXT:        <dict>
47*f4a2713aSLionel Sambuc // CHECK-NEXT:         <key>start</key>
48*f4a2713aSLionel Sambuc // CHECK-NEXT:          <array>
49*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
50*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>24</integer>
51*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>3</integer>
52*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
53*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
54*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
55*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>24</integer>
56*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>12</integer>
57*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
58*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
59*f4a2713aSLionel Sambuc // CHECK-NEXT:          </array>
60*f4a2713aSLionel Sambuc // CHECK-NEXT:         <key>end</key>
61*f4a2713aSLionel Sambuc // CHECK-NEXT:          <array>
62*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
63*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>24</integer>
64*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>21</integer>
65*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
66*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
67*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
68*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>24</integer>
69*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>34</integer>
70*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
71*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
72*f4a2713aSLionel Sambuc // CHECK-NEXT:          </array>
73*f4a2713aSLionel Sambuc // CHECK-NEXT:        </dict>
74*f4a2713aSLionel Sambuc // CHECK-NEXT:       </array>
75*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
76*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
77*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>event</string>
78*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>location</key>
79*f4a2713aSLionel Sambuc // CHECK-NEXT:      <dict>
80*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>line</key><integer>24</integer>
81*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>col</key><integer>21</integer>
82*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>file</key><integer>0</integer>
83*f4a2713aSLionel Sambuc // CHECK-NEXT:      </dict>
84*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>ranges</key>
85*f4a2713aSLionel Sambuc // CHECK-NEXT:      <array>
86*f4a2713aSLionel Sambuc // CHECK-NEXT:        <array>
87*f4a2713aSLionel Sambuc // CHECK-NEXT:         <dict>
88*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>line</key><integer>24</integer>
89*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>col</key><integer>21</integer>
90*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>file</key><integer>0</integer>
91*f4a2713aSLionel Sambuc // CHECK-NEXT:         </dict>
92*f4a2713aSLionel Sambuc // CHECK-NEXT:         <dict>
93*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>line</key><integer>24</integer>
94*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>col</key><integer>36</integer>
95*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>file</key><integer>0</integer>
96*f4a2713aSLionel Sambuc // CHECK-NEXT:         </dict>
97*f4a2713aSLionel Sambuc // CHECK-NEXT:        </array>
98*f4a2713aSLionel Sambuc // CHECK-NEXT:      </array>
99*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>depth</key><integer>0</integer>
100*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>extended_message</key>
101*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>Calling &apos;getNullWrapper&apos;</string>
102*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>message</key>
103*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>Calling &apos;getNullWrapper&apos;</string>
104*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
105*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
106*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>event</string>
107*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>location</key>
108*f4a2713aSLionel Sambuc // CHECK-NEXT:      <dict>
109*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>line</key><integer>9</integer>
110*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>col</key><integer>1</integer>
111*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>file</key><integer>0</integer>
112*f4a2713aSLionel Sambuc // CHECK-NEXT:      </dict>
113*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>depth</key><integer>1</integer>
114*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>extended_message</key>
115*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>Entered call from &apos;memberCallBaseDisappears&apos;</string>
116*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>message</key>
117*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>Entered call from &apos;memberCallBaseDisappears&apos;</string>
118*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
119*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
120*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>control</string>
121*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>edges</key>
122*f4a2713aSLionel Sambuc // CHECK-NEXT:       <array>
123*f4a2713aSLionel Sambuc // CHECK-NEXT:        <dict>
124*f4a2713aSLionel Sambuc // CHECK-NEXT:         <key>start</key>
125*f4a2713aSLionel Sambuc // CHECK-NEXT:          <array>
126*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
127*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>9</integer>
128*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>1</integer>
129*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
130*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
131*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
132*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>9</integer>
133*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>10</integer>
134*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
135*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
136*f4a2713aSLionel Sambuc // CHECK-NEXT:          </array>
137*f4a2713aSLionel Sambuc // CHECK-NEXT:         <key>end</key>
138*f4a2713aSLionel Sambuc // CHECK-NEXT:          <array>
139*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
140*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>10</integer>
141*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>3</integer>
142*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
143*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
144*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
145*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>10</integer>
146*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>8</integer>
147*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
148*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
149*f4a2713aSLionel Sambuc // CHECK-NEXT:          </array>
150*f4a2713aSLionel Sambuc // CHECK-NEXT:        </dict>
151*f4a2713aSLionel Sambuc // CHECK-NEXT:       </array>
152*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
153*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
154*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>event</string>
155*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>location</key>
156*f4a2713aSLionel Sambuc // CHECK-NEXT:      <dict>
157*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>line</key><integer>10</integer>
158*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>col</key><integer>3</integer>
159*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>file</key><integer>0</integer>
160*f4a2713aSLionel Sambuc // CHECK-NEXT:      </dict>
161*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>ranges</key>
162*f4a2713aSLionel Sambuc // CHECK-NEXT:      <array>
163*f4a2713aSLionel Sambuc // CHECK-NEXT:        <array>
164*f4a2713aSLionel Sambuc // CHECK-NEXT:         <dict>
165*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>line</key><integer>10</integer>
166*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>col</key><integer>3</integer>
167*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>file</key><integer>0</integer>
168*f4a2713aSLionel Sambuc // CHECK-NEXT:         </dict>
169*f4a2713aSLionel Sambuc // CHECK-NEXT:         <dict>
170*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>line</key><integer>10</integer>
171*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>col</key><integer>10</integer>
172*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>file</key><integer>0</integer>
173*f4a2713aSLionel Sambuc // CHECK-NEXT:         </dict>
174*f4a2713aSLionel Sambuc // CHECK-NEXT:        </array>
175*f4a2713aSLionel Sambuc // CHECK-NEXT:      </array>
176*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>depth</key><integer>1</integer>
177*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>extended_message</key>
178*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>Returning null pointer</string>
179*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>message</key>
180*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>Returning null pointer</string>
181*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
182*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
183*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>event</string>
184*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>location</key>
185*f4a2713aSLionel Sambuc // CHECK-NEXT:      <dict>
186*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>line</key><integer>24</integer>
187*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>col</key><integer>21</integer>
188*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>file</key><integer>0</integer>
189*f4a2713aSLionel Sambuc // CHECK-NEXT:      </dict>
190*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>ranges</key>
191*f4a2713aSLionel Sambuc // CHECK-NEXT:      <array>
192*f4a2713aSLionel Sambuc // CHECK-NEXT:        <array>
193*f4a2713aSLionel Sambuc // CHECK-NEXT:         <dict>
194*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>line</key><integer>24</integer>
195*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>col</key><integer>21</integer>
196*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>file</key><integer>0</integer>
197*f4a2713aSLionel Sambuc // CHECK-NEXT:         </dict>
198*f4a2713aSLionel Sambuc // CHECK-NEXT:         <dict>
199*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>line</key><integer>24</integer>
200*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>col</key><integer>36</integer>
201*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>file</key><integer>0</integer>
202*f4a2713aSLionel Sambuc // CHECK-NEXT:         </dict>
203*f4a2713aSLionel Sambuc // CHECK-NEXT:        </array>
204*f4a2713aSLionel Sambuc // CHECK-NEXT:      </array>
205*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>depth</key><integer>0</integer>
206*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>extended_message</key>
207*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>Returning from &apos;getNullWrapper&apos;</string>
208*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>message</key>
209*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>Returning from &apos;getNullWrapper&apos;</string>
210*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
211*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
212*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>control</string>
213*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>edges</key>
214*f4a2713aSLionel Sambuc // CHECK-NEXT:       <array>
215*f4a2713aSLionel Sambuc // CHECK-NEXT:        <dict>
216*f4a2713aSLionel Sambuc // CHECK-NEXT:         <key>start</key>
217*f4a2713aSLionel Sambuc // CHECK-NEXT:          <array>
218*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
219*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>24</integer>
220*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>21</integer>
221*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
222*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
223*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
224*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>24</integer>
225*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>34</integer>
226*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
227*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
228*f4a2713aSLionel Sambuc // CHECK-NEXT:          </array>
229*f4a2713aSLionel Sambuc // CHECK-NEXT:         <key>end</key>
230*f4a2713aSLionel Sambuc // CHECK-NEXT:          <array>
231*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
232*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>24</integer>
233*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>3</integer>
234*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
235*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
236*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
237*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>24</integer>
238*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>12</integer>
239*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
240*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
241*f4a2713aSLionel Sambuc // CHECK-NEXT:          </array>
242*f4a2713aSLionel Sambuc // CHECK-NEXT:        </dict>
243*f4a2713aSLionel Sambuc // CHECK-NEXT:       </array>
244*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
245*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
246*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>event</string>
247*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>location</key>
248*f4a2713aSLionel Sambuc // CHECK-NEXT:      <dict>
249*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>line</key><integer>24</integer>
250*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>col</key><integer>3</integer>
251*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>file</key><integer>0</integer>
252*f4a2713aSLionel Sambuc // CHECK-NEXT:      </dict>
253*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>ranges</key>
254*f4a2713aSLionel Sambuc // CHECK-NEXT:      <array>
255*f4a2713aSLionel Sambuc // CHECK-NEXT:        <array>
256*f4a2713aSLionel Sambuc // CHECK-NEXT:         <dict>
257*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>line</key><integer>24</integer>
258*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>col</key><integer>3</integer>
259*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>file</key><integer>0</integer>
260*f4a2713aSLionel Sambuc // CHECK-NEXT:         </dict>
261*f4a2713aSLionel Sambuc // CHECK-NEXT:         <dict>
262*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>line</key><integer>24</integer>
263*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>col</key><integer>17</integer>
264*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>file</key><integer>0</integer>
265*f4a2713aSLionel Sambuc // CHECK-NEXT:         </dict>
266*f4a2713aSLionel Sambuc // CHECK-NEXT:        </array>
267*f4a2713aSLionel Sambuc // CHECK-NEXT:      </array>
268*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>depth</key><integer>0</integer>
269*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>extended_message</key>
270*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>&apos;ptr&apos; initialized to a null pointer value</string>
271*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>message</key>
272*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>&apos;ptr&apos; initialized to a null pointer value</string>
273*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
274*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
275*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>control</string>
276*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>edges</key>
277*f4a2713aSLionel Sambuc // CHECK-NEXT:       <array>
278*f4a2713aSLionel Sambuc // CHECK-NEXT:        <dict>
279*f4a2713aSLionel Sambuc // CHECK-NEXT:         <key>start</key>
280*f4a2713aSLionel Sambuc // CHECK-NEXT:          <array>
281*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
282*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>24</integer>
283*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>3</integer>
284*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
285*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
286*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
287*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>24</integer>
288*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>12</integer>
289*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
290*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
291*f4a2713aSLionel Sambuc // CHECK-NEXT:          </array>
292*f4a2713aSLionel Sambuc // CHECK-NEXT:         <key>end</key>
293*f4a2713aSLionel Sambuc // CHECK-NEXT:          <array>
294*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
295*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>33</integer>
296*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>3</integer>
297*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
298*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
299*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
300*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>33</integer>
301*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>8</integer>
302*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
303*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
304*f4a2713aSLionel Sambuc // CHECK-NEXT:          </array>
305*f4a2713aSLionel Sambuc // CHECK-NEXT:        </dict>
306*f4a2713aSLionel Sambuc // CHECK-NEXT:       </array>
307*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
308*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
309*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>control</string>
310*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>edges</key>
311*f4a2713aSLionel Sambuc // CHECK-NEXT:       <array>
312*f4a2713aSLionel Sambuc // CHECK-NEXT:        <dict>
313*f4a2713aSLionel Sambuc // CHECK-NEXT:         <key>start</key>
314*f4a2713aSLionel Sambuc // CHECK-NEXT:          <array>
315*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
316*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>33</integer>
317*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>3</integer>
318*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
319*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
320*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
321*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>33</integer>
322*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>8</integer>
323*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
324*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
325*f4a2713aSLionel Sambuc // CHECK-NEXT:          </array>
326*f4a2713aSLionel Sambuc // CHECK-NEXT:         <key>end</key>
327*f4a2713aSLionel Sambuc // CHECK-NEXT:          <array>
328*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
329*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>33</integer>
330*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>10</integer>
331*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
332*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
333*f4a2713aSLionel Sambuc // CHECK-NEXT:           <dict>
334*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>line</key><integer>33</integer>
335*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>col</key><integer>12</integer>
336*f4a2713aSLionel Sambuc // CHECK-NEXT:            <key>file</key><integer>0</integer>
337*f4a2713aSLionel Sambuc // CHECK-NEXT:           </dict>
338*f4a2713aSLionel Sambuc // CHECK-NEXT:          </array>
339*f4a2713aSLionel Sambuc // CHECK-NEXT:        </dict>
340*f4a2713aSLionel Sambuc // CHECK-NEXT:       </array>
341*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
342*f4a2713aSLionel Sambuc // CHECK-NEXT:     <dict>
343*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>kind</key><string>event</string>
344*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>location</key>
345*f4a2713aSLionel Sambuc // CHECK-NEXT:      <dict>
346*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>line</key><integer>33</integer>
347*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>col</key><integer>10</integer>
348*f4a2713aSLionel Sambuc // CHECK-NEXT:       <key>file</key><integer>0</integer>
349*f4a2713aSLionel Sambuc // CHECK-NEXT:      </dict>
350*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>ranges</key>
351*f4a2713aSLionel Sambuc // CHECK-NEXT:      <array>
352*f4a2713aSLionel Sambuc // CHECK-NEXT:        <array>
353*f4a2713aSLionel Sambuc // CHECK-NEXT:         <dict>
354*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>line</key><integer>33</integer>
355*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>col</key><integer>10</integer>
356*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>file</key><integer>0</integer>
357*f4a2713aSLionel Sambuc // CHECK-NEXT:         </dict>
358*f4a2713aSLionel Sambuc // CHECK-NEXT:         <dict>
359*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>line</key><integer>33</integer>
360*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>col</key><integer>12</integer>
361*f4a2713aSLionel Sambuc // CHECK-NEXT:          <key>file</key><integer>0</integer>
362*f4a2713aSLionel Sambuc // CHECK-NEXT:         </dict>
363*f4a2713aSLionel Sambuc // CHECK-NEXT:        </array>
364*f4a2713aSLionel Sambuc // CHECK-NEXT:      </array>
365*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>depth</key><integer>0</integer>
366*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>extended_message</key>
367*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>Called C++ object pointer is null</string>
368*f4a2713aSLionel Sambuc // CHECK-NEXT:      <key>message</key>
369*f4a2713aSLionel Sambuc // CHECK-NEXT:      <string>Called C++ object pointer is null</string>
370*f4a2713aSLionel Sambuc // CHECK-NEXT:     </dict>
371*f4a2713aSLionel Sambuc // CHECK-NEXT:    </array>
372*f4a2713aSLionel Sambuc // CHECK-NEXT:    <key>description</key><string>Called C++ object pointer is null</string>
373*f4a2713aSLionel Sambuc // CHECK-NEXT:    <key>category</key><string>Logic error</string>
374*f4a2713aSLionel Sambuc // CHECK-NEXT:    <key>type</key><string>Called C++ object pointer is null</string>
375*f4a2713aSLionel Sambuc // CHECK-NEXT:   <key>issue_context_kind</key><string>function</string>
376*f4a2713aSLionel Sambuc // CHECK-NEXT:   <key>issue_context</key><string>memberCallBaseDisappears</string>
377*f4a2713aSLionel Sambuc // CHECK-NEXT:   <key>issue_hash</key><string>19</string>
378*f4a2713aSLionel Sambuc // CHECK-NEXT:   <key>location</key>
379*f4a2713aSLionel Sambuc // CHECK-NEXT:   <dict>
380*f4a2713aSLionel Sambuc // CHECK-NEXT:    <key>line</key><integer>33</integer>
381*f4a2713aSLionel Sambuc // CHECK-NEXT:    <key>col</key><integer>10</integer>
382*f4a2713aSLionel Sambuc // CHECK-NEXT:    <key>file</key><integer>0</integer>
383*f4a2713aSLionel Sambuc // CHECK-NEXT:   </dict>
384*f4a2713aSLionel Sambuc // CHECK-NEXT:   </dict>
385*f4a2713aSLionel Sambuc // CHECK-NEXT:  </array>
386