1*67e74705SXin Li // RUN: %clang_cc1 -analyze -analyzer-checker=cplusplus.NewDelete,unix.Malloc -analyzer-output=text -verify %s 2*67e74705SXin Li // RUN: %clang_cc1 -analyze -analyzer-checker=cplusplus.NewDelete,unix.Malloc -analyzer-output=plist -analyzer-config path-diagnostics-alternate=false %s -o %t.plist 3*67e74705SXin Li // RUN: FileCheck --input-file=%t.plist %s 4*67e74705SXin Li test()5*67e74705SXin Livoid test() { 6*67e74705SXin Li int *p = new int; 7*67e74705SXin Li // expected-note@-1 {{Memory is allocated}} 8*67e74705SXin Li if (p) 9*67e74705SXin Li // expected-note@-1 {{Taking true branch}} 10*67e74705SXin Li delete p; 11*67e74705SXin Li // expected-note@-1 {{Memory is released}} 12*67e74705SXin Li 13*67e74705SXin Li delete p; // expected-warning {{Attempt to free released memory}} 14*67e74705SXin Li // expected-note@-1 {{Attempt to free released memory}} 15*67e74705SXin Li } 16*67e74705SXin Li 17*67e74705SXin Li struct Odd { killOdd18*67e74705SXin Li void kill() { 19*67e74705SXin Li delete this; // expected-note {{Memory is released}} 20*67e74705SXin Li } 21*67e74705SXin Li }; 22*67e74705SXin Li test(Odd * odd)23*67e74705SXin Livoid test(Odd *odd) { 24*67e74705SXin Li odd->kill(); // expected-note{{Calling 'Odd::kill'}} 25*67e74705SXin Li // expected-note@-1 {{Returning; memory was released}} 26*67e74705SXin Li delete odd; // expected-warning {{Attempt to free released memory}} 27*67e74705SXin Li // expected-note@-1 {{Attempt to free released memory}} 28*67e74705SXin Li } 29*67e74705SXin Li 30*67e74705SXin Li // CHECK: <key>diagnostics</key> 31*67e74705SXin Li // CHECK-NEXT: <array> 32*67e74705SXin Li // CHECK-NEXT: <dict> 33*67e74705SXin Li // CHECK-NEXT: <key>path</key> 34*67e74705SXin Li // CHECK-NEXT: <array> 35*67e74705SXin Li // CHECK-NEXT: <dict> 36*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>control</string> 37*67e74705SXin Li // CHECK-NEXT: <key>edges</key> 38*67e74705SXin Li // CHECK-NEXT: <array> 39*67e74705SXin Li // CHECK-NEXT: <dict> 40*67e74705SXin Li // CHECK-NEXT: <key>start</key> 41*67e74705SXin Li // CHECK-NEXT: <array> 42*67e74705SXin Li // CHECK-NEXT: <dict> 43*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>6</integer> 44*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 45*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 46*67e74705SXin Li // CHECK-NEXT: </dict> 47*67e74705SXin Li // CHECK-NEXT: <dict> 48*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>6</integer> 49*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 50*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 51*67e74705SXin Li // CHECK-NEXT: </dict> 52*67e74705SXin Li // CHECK-NEXT: </array> 53*67e74705SXin Li // CHECK-NEXT: <key>end</key> 54*67e74705SXin Li // CHECK-NEXT: <array> 55*67e74705SXin Li // CHECK-NEXT: <dict> 56*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>6</integer> 57*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>12</integer> 58*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 59*67e74705SXin Li // CHECK-NEXT: </dict> 60*67e74705SXin Li // CHECK-NEXT: <dict> 61*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>6</integer> 62*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>14</integer> 63*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 64*67e74705SXin Li // CHECK-NEXT: </dict> 65*67e74705SXin Li // CHECK-NEXT: </array> 66*67e74705SXin Li // CHECK-NEXT: </dict> 67*67e74705SXin Li // CHECK-NEXT: </array> 68*67e74705SXin Li // CHECK-NEXT: </dict> 69*67e74705SXin Li // CHECK-NEXT: <dict> 70*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 71*67e74705SXin Li // CHECK-NEXT: <key>location</key> 72*67e74705SXin Li // CHECK-NEXT: <dict> 73*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>6</integer> 74*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>12</integer> 75*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 76*67e74705SXin Li // CHECK-NEXT: </dict> 77*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 78*67e74705SXin Li // CHECK-NEXT: <array> 79*67e74705SXin Li // CHECK-NEXT: <array> 80*67e74705SXin Li // CHECK-NEXT: <dict> 81*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>6</integer> 82*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>12</integer> 83*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 84*67e74705SXin Li // CHECK-NEXT: </dict> 85*67e74705SXin Li // CHECK-NEXT: <dict> 86*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>6</integer> 87*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>18</integer> 88*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 89*67e74705SXin Li // CHECK-NEXT: </dict> 90*67e74705SXin Li // CHECK-NEXT: </array> 91*67e74705SXin Li // CHECK-NEXT: </array> 92*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>0</integer> 93*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 94*67e74705SXin Li // CHECK-NEXT: <string>Memory is allocated</string> 95*67e74705SXin Li // CHECK-NEXT: <key>message</key> 96*67e74705SXin Li // CHECK-NEXT: <string>Memory is allocated</string> 97*67e74705SXin Li // CHECK-NEXT: </dict> 98*67e74705SXin Li // CHECK-NEXT: <dict> 99*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>control</string> 100*67e74705SXin Li // CHECK-NEXT: <key>edges</key> 101*67e74705SXin Li // CHECK-NEXT: <array> 102*67e74705SXin Li // CHECK-NEXT: <dict> 103*67e74705SXin Li // CHECK-NEXT: <key>start</key> 104*67e74705SXin Li // CHECK-NEXT: <array> 105*67e74705SXin Li // CHECK-NEXT: <dict> 106*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>6</integer> 107*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>12</integer> 108*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 109*67e74705SXin Li // CHECK-NEXT: </dict> 110*67e74705SXin Li // CHECK-NEXT: <dict> 111*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>6</integer> 112*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>14</integer> 113*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 114*67e74705SXin Li // CHECK-NEXT: </dict> 115*67e74705SXin Li // CHECK-NEXT: </array> 116*67e74705SXin Li // CHECK-NEXT: <key>end</key> 117*67e74705SXin Li // CHECK-NEXT: <array> 118*67e74705SXin Li // CHECK-NEXT: <dict> 119*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>8</integer> 120*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 121*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 122*67e74705SXin Li // CHECK-NEXT: </dict> 123*67e74705SXin Li // CHECK-NEXT: <dict> 124*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>8</integer> 125*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>4</integer> 126*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 127*67e74705SXin Li // CHECK-NEXT: </dict> 128*67e74705SXin Li // CHECK-NEXT: </array> 129*67e74705SXin Li // CHECK-NEXT: </dict> 130*67e74705SXin Li // CHECK-NEXT: </array> 131*67e74705SXin Li // CHECK-NEXT: </dict> 132*67e74705SXin Li // CHECK-NEXT: <dict> 133*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>control</string> 134*67e74705SXin Li // CHECK-NEXT: <key>edges</key> 135*67e74705SXin Li // CHECK-NEXT: <array> 136*67e74705SXin Li // CHECK-NEXT: <dict> 137*67e74705SXin Li // CHECK-NEXT: <key>start</key> 138*67e74705SXin Li // CHECK-NEXT: <array> 139*67e74705SXin Li // CHECK-NEXT: <dict> 140*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>8</integer> 141*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 142*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 143*67e74705SXin Li // CHECK-NEXT: </dict> 144*67e74705SXin Li // CHECK-NEXT: <dict> 145*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>8</integer> 146*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>4</integer> 147*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 148*67e74705SXin Li // CHECK-NEXT: </dict> 149*67e74705SXin Li // CHECK-NEXT: </array> 150*67e74705SXin Li // CHECK-NEXT: <key>end</key> 151*67e74705SXin Li // CHECK-NEXT: <array> 152*67e74705SXin Li // CHECK-NEXT: <dict> 153*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 154*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 155*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 156*67e74705SXin Li // CHECK-NEXT: </dict> 157*67e74705SXin Li // CHECK-NEXT: <dict> 158*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 159*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>10</integer> 160*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 161*67e74705SXin Li // CHECK-NEXT: </dict> 162*67e74705SXin Li // CHECK-NEXT: </array> 163*67e74705SXin Li // CHECK-NEXT: </dict> 164*67e74705SXin Li // CHECK-NEXT: </array> 165*67e74705SXin Li // CHECK-NEXT: </dict> 166*67e74705SXin Li // CHECK-NEXT: <dict> 167*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 168*67e74705SXin Li // CHECK-NEXT: <key>location</key> 169*67e74705SXin Li // CHECK-NEXT: <dict> 170*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 171*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 172*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 173*67e74705SXin Li // CHECK-NEXT: </dict> 174*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 175*67e74705SXin Li // CHECK-NEXT: <array> 176*67e74705SXin Li // CHECK-NEXT: <array> 177*67e74705SXin Li // CHECK-NEXT: <dict> 178*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 179*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 180*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 181*67e74705SXin Li // CHECK-NEXT: </dict> 182*67e74705SXin Li // CHECK-NEXT: <dict> 183*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 184*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>12</integer> 185*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 186*67e74705SXin Li // CHECK-NEXT: </dict> 187*67e74705SXin Li // CHECK-NEXT: </array> 188*67e74705SXin Li // CHECK-NEXT: </array> 189*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>0</integer> 190*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 191*67e74705SXin Li // CHECK-NEXT: <string>Memory is released</string> 192*67e74705SXin Li // CHECK-NEXT: <key>message</key> 193*67e74705SXin Li // CHECK-NEXT: <string>Memory is released</string> 194*67e74705SXin Li // CHECK-NEXT: </dict> 195*67e74705SXin Li // CHECK-NEXT: <dict> 196*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>control</string> 197*67e74705SXin Li // CHECK-NEXT: <key>edges</key> 198*67e74705SXin Li // CHECK-NEXT: <array> 199*67e74705SXin Li // CHECK-NEXT: <dict> 200*67e74705SXin Li // CHECK-NEXT: <key>start</key> 201*67e74705SXin Li // CHECK-NEXT: <array> 202*67e74705SXin Li // CHECK-NEXT: <dict> 203*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 204*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 205*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 206*67e74705SXin Li // CHECK-NEXT: </dict> 207*67e74705SXin Li // CHECK-NEXT: <dict> 208*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 209*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>10</integer> 210*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 211*67e74705SXin Li // CHECK-NEXT: </dict> 212*67e74705SXin Li // CHECK-NEXT: </array> 213*67e74705SXin Li // CHECK-NEXT: <key>end</key> 214*67e74705SXin Li // CHECK-NEXT: <array> 215*67e74705SXin Li // CHECK-NEXT: <dict> 216*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>13</integer> 217*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 218*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 219*67e74705SXin Li // CHECK-NEXT: </dict> 220*67e74705SXin Li // CHECK-NEXT: <dict> 221*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>13</integer> 222*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>8</integer> 223*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 224*67e74705SXin Li // CHECK-NEXT: </dict> 225*67e74705SXin Li // CHECK-NEXT: </array> 226*67e74705SXin Li // CHECK-NEXT: </dict> 227*67e74705SXin Li // CHECK-NEXT: </array> 228*67e74705SXin Li // CHECK-NEXT: </dict> 229*67e74705SXin Li // CHECK-NEXT: <dict> 230*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 231*67e74705SXin Li // CHECK-NEXT: <key>location</key> 232*67e74705SXin Li // CHECK-NEXT: <dict> 233*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>13</integer> 234*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 235*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 236*67e74705SXin Li // CHECK-NEXT: </dict> 237*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 238*67e74705SXin Li // CHECK-NEXT: <array> 239*67e74705SXin Li // CHECK-NEXT: <array> 240*67e74705SXin Li // CHECK-NEXT: <dict> 241*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>13</integer> 242*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 243*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 244*67e74705SXin Li // CHECK-NEXT: </dict> 245*67e74705SXin Li // CHECK-NEXT: <dict> 246*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>13</integer> 247*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>10</integer> 248*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 249*67e74705SXin Li // CHECK-NEXT: </dict> 250*67e74705SXin Li // CHECK-NEXT: </array> 251*67e74705SXin Li // CHECK-NEXT: </array> 252*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>0</integer> 253*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 254*67e74705SXin Li // CHECK-NEXT: <string>Attempt to free released memory</string> 255*67e74705SXin Li // CHECK-NEXT: <key>message</key> 256*67e74705SXin Li // CHECK-NEXT: <string>Attempt to free released memory</string> 257*67e74705SXin Li // CHECK-NEXT: </dict> 258*67e74705SXin Li // CHECK-NEXT: </array> 259*67e74705SXin Li // CHECK-NEXT: <key>description</key><string>Attempt to free released memory</string> 260*67e74705SXin Li // CHECK-NEXT: <key>category</key><string>Memory Error</string> 261*67e74705SXin Li // CHECK-NEXT: <key>type</key><string>Double free</string> 262*67e74705SXin Li // CHECK-NEXT: <key>check_name</key><string>cplusplus.NewDelete</string> 263*67e74705SXin Li // CHECK-NEXT: <!-- This hash is experimental and going to change! --> 264*67e74705SXin Li // CHECK-NEXT: <key>issue_hash_content_of_line_in_context</key><string>bd8e324d09c70b9e2be6f824a4942e5a</string> 265*67e74705SXin Li // CHECK-NEXT: <key>issue_context_kind</key><string>function</string> 266*67e74705SXin Li // CHECK-NEXT: <key>issue_context</key><string>test</string> 267*67e74705SXin Li // CHECK-NEXT: <key>issue_hash_function_offset</key><string>8</string> 268*67e74705SXin Li // CHECK-NEXT: <key>location</key> 269*67e74705SXin Li // CHECK-NEXT: <dict> 270*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>13</integer> 271*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 272*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 273*67e74705SXin Li // CHECK-NEXT: </dict> 274*67e74705SXin Li // CHECK-NEXT: </dict> 275*67e74705SXin Li // CHECK-NEXT: <dict> 276*67e74705SXin Li // CHECK-NEXT: <key>path</key> 277*67e74705SXin Li // CHECK-NEXT: <array> 278*67e74705SXin Li // CHECK-NEXT: <dict> 279*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 280*67e74705SXin Li // CHECK-NEXT: <key>location</key> 281*67e74705SXin Li // CHECK-NEXT: <dict> 282*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>24</integer> 283*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 284*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 285*67e74705SXin Li // CHECK-NEXT: </dict> 286*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 287*67e74705SXin Li // CHECK-NEXT: <array> 288*67e74705SXin Li // CHECK-NEXT: <array> 289*67e74705SXin Li // CHECK-NEXT: <dict> 290*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>24</integer> 291*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 292*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 293*67e74705SXin Li // CHECK-NEXT: </dict> 294*67e74705SXin Li // CHECK-NEXT: <dict> 295*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>24</integer> 296*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>12</integer> 297*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 298*67e74705SXin Li // CHECK-NEXT: </dict> 299*67e74705SXin Li // CHECK-NEXT: </array> 300*67e74705SXin Li // CHECK-NEXT: </array> 301*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>0</integer> 302*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 303*67e74705SXin Li // CHECK-NEXT: <string>Calling 'Odd::kill'</string> 304*67e74705SXin Li // CHECK-NEXT: <key>message</key> 305*67e74705SXin Li // CHECK-NEXT: <string>Calling 'Odd::kill'</string> 306*67e74705SXin Li // CHECK-NEXT: </dict> 307*67e74705SXin Li // CHECK-NEXT: <dict> 308*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 309*67e74705SXin Li // CHECK-NEXT: <key>location</key> 310*67e74705SXin Li // CHECK-NEXT: <dict> 311*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>18</integer> 312*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 313*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 314*67e74705SXin Li // CHECK-NEXT: </dict> 315*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>1</integer> 316*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 317*67e74705SXin Li // CHECK-NEXT: <string>Entered call from 'test'</string> 318*67e74705SXin Li // CHECK-NEXT: <key>message</key> 319*67e74705SXin Li // CHECK-NEXT: <string>Entered call from 'test'</string> 320*67e74705SXin Li // CHECK-NEXT: </dict> 321*67e74705SXin Li // CHECK-NEXT: <dict> 322*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>control</string> 323*67e74705SXin Li // CHECK-NEXT: <key>edges</key> 324*67e74705SXin Li // CHECK-NEXT: <array> 325*67e74705SXin Li // CHECK-NEXT: <dict> 326*67e74705SXin Li // CHECK-NEXT: <key>start</key> 327*67e74705SXin Li // CHECK-NEXT: <array> 328*67e74705SXin Li // CHECK-NEXT: <dict> 329*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>18</integer> 330*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 331*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 332*67e74705SXin Li // CHECK-NEXT: </dict> 333*67e74705SXin Li // CHECK-NEXT: <dict> 334*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>18</integer> 335*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 336*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 337*67e74705SXin Li // CHECK-NEXT: </dict> 338*67e74705SXin Li // CHECK-NEXT: </array> 339*67e74705SXin Li // CHECK-NEXT: <key>end</key> 340*67e74705SXin Li // CHECK-NEXT: <array> 341*67e74705SXin Li // CHECK-NEXT: <dict> 342*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>19</integer> 343*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 344*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 345*67e74705SXin Li // CHECK-NEXT: </dict> 346*67e74705SXin Li // CHECK-NEXT: <dict> 347*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>19</integer> 348*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>8</integer> 349*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 350*67e74705SXin Li // CHECK-NEXT: </dict> 351*67e74705SXin Li // CHECK-NEXT: </array> 352*67e74705SXin Li // CHECK-NEXT: </dict> 353*67e74705SXin Li // CHECK-NEXT: </array> 354*67e74705SXin Li // CHECK-NEXT: </dict> 355*67e74705SXin Li // CHECK-NEXT: <dict> 356*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 357*67e74705SXin Li // CHECK-NEXT: <key>location</key> 358*67e74705SXin Li // CHECK-NEXT: <dict> 359*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>19</integer> 360*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 361*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 362*67e74705SXin Li // CHECK-NEXT: </dict> 363*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 364*67e74705SXin Li // CHECK-NEXT: <array> 365*67e74705SXin Li // CHECK-NEXT: <array> 366*67e74705SXin Li // CHECK-NEXT: <dict> 367*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>19</integer> 368*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 369*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 370*67e74705SXin Li // CHECK-NEXT: </dict> 371*67e74705SXin Li // CHECK-NEXT: <dict> 372*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>19</integer> 373*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>13</integer> 374*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 375*67e74705SXin Li // CHECK-NEXT: </dict> 376*67e74705SXin Li // CHECK-NEXT: </array> 377*67e74705SXin Li // CHECK-NEXT: </array> 378*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>1</integer> 379*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 380*67e74705SXin Li // CHECK-NEXT: <string>Memory is released</string> 381*67e74705SXin Li // CHECK-NEXT: <key>message</key> 382*67e74705SXin Li // CHECK-NEXT: <string>Memory is released</string> 383*67e74705SXin Li // CHECK-NEXT: </dict> 384*67e74705SXin Li // CHECK-NEXT: <dict> 385*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 386*67e74705SXin Li // CHECK-NEXT: <key>location</key> 387*67e74705SXin Li // CHECK-NEXT: <dict> 388*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>24</integer> 389*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 390*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 391*67e74705SXin Li // CHECK-NEXT: </dict> 392*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 393*67e74705SXin Li // CHECK-NEXT: <array> 394*67e74705SXin Li // CHECK-NEXT: <array> 395*67e74705SXin Li // CHECK-NEXT: <dict> 396*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>24</integer> 397*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 398*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 399*67e74705SXin Li // CHECK-NEXT: </dict> 400*67e74705SXin Li // CHECK-NEXT: <dict> 401*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>24</integer> 402*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>12</integer> 403*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 404*67e74705SXin Li // CHECK-NEXT: </dict> 405*67e74705SXin Li // CHECK-NEXT: </array> 406*67e74705SXin Li // CHECK-NEXT: </array> 407*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>0</integer> 408*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 409*67e74705SXin Li // CHECK-NEXT: <string>Returning; memory was released</string> 410*67e74705SXin Li // CHECK-NEXT: <key>message</key> 411*67e74705SXin Li // CHECK-NEXT: <string>Returning; memory was released</string> 412*67e74705SXin Li // CHECK-NEXT: </dict> 413*67e74705SXin Li // CHECK-NEXT: <dict> 414*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>control</string> 415*67e74705SXin Li // CHECK-NEXT: <key>edges</key> 416*67e74705SXin Li // CHECK-NEXT: <array> 417*67e74705SXin Li // CHECK-NEXT: <dict> 418*67e74705SXin Li // CHECK-NEXT: <key>start</key> 419*67e74705SXin Li // CHECK-NEXT: <array> 420*67e74705SXin Li // CHECK-NEXT: <dict> 421*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>24</integer> 422*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 423*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 424*67e74705SXin Li // CHECK-NEXT: </dict> 425*67e74705SXin Li // CHECK-NEXT: <dict> 426*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>24</integer> 427*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>4</integer> 428*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 429*67e74705SXin Li // CHECK-NEXT: </dict> 430*67e74705SXin Li // CHECK-NEXT: </array> 431*67e74705SXin Li // CHECK-NEXT: <key>end</key> 432*67e74705SXin Li // CHECK-NEXT: <array> 433*67e74705SXin Li // CHECK-NEXT: <dict> 434*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>26</integer> 435*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 436*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 437*67e74705SXin Li // CHECK-NEXT: </dict> 438*67e74705SXin Li // CHECK-NEXT: <dict> 439*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>26</integer> 440*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>7</integer> 441*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 442*67e74705SXin Li // CHECK-NEXT: </dict> 443*67e74705SXin Li // CHECK-NEXT: </array> 444*67e74705SXin Li // CHECK-NEXT: </dict> 445*67e74705SXin Li // CHECK-NEXT: </array> 446*67e74705SXin Li // CHECK-NEXT: </dict> 447*67e74705SXin Li // CHECK-NEXT: <dict> 448*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 449*67e74705SXin Li // CHECK-NEXT: <key>location</key> 450*67e74705SXin Li // CHECK-NEXT: <dict> 451*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>26</integer> 452*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 453*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 454*67e74705SXin Li // CHECK-NEXT: </dict> 455*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 456*67e74705SXin Li // CHECK-NEXT: <array> 457*67e74705SXin Li // CHECK-NEXT: <array> 458*67e74705SXin Li // CHECK-NEXT: <dict> 459*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>26</integer> 460*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 461*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 462*67e74705SXin Li // CHECK-NEXT: </dict> 463*67e74705SXin Li // CHECK-NEXT: <dict> 464*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>26</integer> 465*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>11</integer> 466*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 467*67e74705SXin Li // CHECK-NEXT: </dict> 468*67e74705SXin Li // CHECK-NEXT: </array> 469*67e74705SXin Li // CHECK-NEXT: </array> 470*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>0</integer> 471*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 472*67e74705SXin Li // CHECK-NEXT: <string>Attempt to free released memory</string> 473*67e74705SXin Li // CHECK-NEXT: <key>message</key> 474*67e74705SXin Li // CHECK-NEXT: <string>Attempt to free released memory</string> 475*67e74705SXin Li // CHECK-NEXT: </dict> 476*67e74705SXin Li // CHECK-NEXT: </array> 477*67e74705SXin Li // CHECK-NEXT: <key>description</key><string>Attempt to free released memory</string> 478*67e74705SXin Li // CHECK-NEXT: <key>category</key><string>Memory Error</string> 479*67e74705SXin Li // CHECK-NEXT: <key>type</key><string>Double free</string> 480*67e74705SXin Li // CHECK-NEXT: <key>check_name</key><string>cplusplus.NewDelete</string> 481*67e74705SXin Li // CHECK-NEXT: <!-- This hash is experimental and going to change! --> 482*67e74705SXin Li // CHECK-NEXT: <key>issue_hash_content_of_line_in_context</key><string>8bf1a5b9fdae9d86780aa6c4cdce2605</string> 483*67e74705SXin Li // CHECK-NEXT: <key>issue_context_kind</key><string>function</string> 484*67e74705SXin Li // CHECK-NEXT: <key>issue_context</key><string>test</string> 485*67e74705SXin Li // CHECK-NEXT: <key>issue_hash_function_offset</key><string>3</string> 486*67e74705SXin Li // CHECK-NEXT: <key>location</key> 487*67e74705SXin Li // CHECK-NEXT: <dict> 488*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>26</integer> 489*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>2</integer> 490*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 491*67e74705SXin Li // CHECK-NEXT: </dict> 492*67e74705SXin Li // CHECK-NEXT: </dict> 493*67e74705SXin Li // CHECK-NEXT: </array> 494