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