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 SambucIntWrapper *getNullWrapper() { 10*f4a2713aSLionel Sambuc return 0; 11*f4a2713aSLionel Sambuc // expected-note@-1 {{Returning null pointer}} 12*f4a2713aSLionel Sambuc } 13*f4a2713aSLionel Sambuc memberCallBaseDisappears()14*f4a2713aSLionel Sambucint 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 'getNullWrapper'</string> 102*f4a2713aSLionel Sambuc // CHECK-NEXT: <key>message</key> 103*f4a2713aSLionel Sambuc // CHECK-NEXT: <string>Calling 'getNullWrapper'</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 'memberCallBaseDisappears'</string> 116*f4a2713aSLionel Sambuc // CHECK-NEXT: <key>message</key> 117*f4a2713aSLionel Sambuc // CHECK-NEXT: <string>Entered call from 'memberCallBaseDisappears'</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 'getNullWrapper'</string> 208*f4a2713aSLionel Sambuc // CHECK-NEXT: <key>message</key> 209*f4a2713aSLionel Sambuc // CHECK-NEXT: <string>Returning from 'getNullWrapper'</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>'ptr' initialized to a null pointer value</string> 271*f4a2713aSLionel Sambuc // CHECK-NEXT: <key>message</key> 272*f4a2713aSLionel Sambuc // CHECK-NEXT: <string>'ptr' 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