1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -fsyntax-only -analyze -analyzer-checker=core -analyzer-config inline-lambdas=true -analyzer-output plist -verify %s -o %t 2*67e74705SXin Li // RUN: FileCheck --input-file=%t %s 3*67e74705SXin Li 4*67e74705SXin Li 5*67e74705SXin Li // Diagnostic inside a lambda 6*67e74705SXin Li diagnosticFromLambda()7*67e74705SXin Livoid diagnosticFromLambda() { 8*67e74705SXin Li int i = 0; 9*67e74705SXin Li [=] { 10*67e74705SXin Li int p = 5/i; // expected-warning{{Division by zero}} 11*67e74705SXin Li (void)p; 12*67e74705SXin Li }(); 13*67e74705SXin Li } 14*67e74705SXin Li 15*67e74705SXin Li // CHECK: <key>diagnostics</key> 16*67e74705SXin Li // CHECK-NEXT: <array> 17*67e74705SXin Li // CHECK-NEXT: <dict> 18*67e74705SXin Li // CHECK-NEXT: <key>path</key> 19*67e74705SXin Li // CHECK-NEXT: <array> 20*67e74705SXin Li // CHECK-NEXT: <dict> 21*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>control</string> 22*67e74705SXin Li // CHECK-NEXT: <key>edges</key> 23*67e74705SXin Li // CHECK-NEXT: <array> 24*67e74705SXin Li // CHECK-NEXT: <dict> 25*67e74705SXin Li // CHECK-NEXT: <key>start</key> 26*67e74705SXin Li // CHECK-NEXT: <array> 27*67e74705SXin Li // CHECK-NEXT: <dict> 28*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>8</integer> 29*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 30*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 31*67e74705SXin Li // CHECK-NEXT: </dict> 32*67e74705SXin Li // CHECK-NEXT: <dict> 33*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>8</integer> 34*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 35*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 36*67e74705SXin Li // CHECK-NEXT: </dict> 37*67e74705SXin Li // CHECK-NEXT: </array> 38*67e74705SXin Li // CHECK-NEXT: <key>end</key> 39*67e74705SXin Li // CHECK-NEXT: <array> 40*67e74705SXin Li // CHECK-NEXT: <dict> 41*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 42*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 43*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 44*67e74705SXin Li // CHECK-NEXT: </dict> 45*67e74705SXin Li // CHECK-NEXT: <dict> 46*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 47*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 48*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 49*67e74705SXin Li // CHECK-NEXT: </dict> 50*67e74705SXin Li // CHECK-NEXT: </array> 51*67e74705SXin Li // CHECK-NEXT: </dict> 52*67e74705SXin Li // CHECK-NEXT: </array> 53*67e74705SXin Li // CHECK-NEXT: </dict> 54*67e74705SXin Li // CHECK-NEXT: <dict> 55*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 56*67e74705SXin Li // CHECK-NEXT: <key>location</key> 57*67e74705SXin Li // CHECK-NEXT: <dict> 58*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 59*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 60*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 61*67e74705SXin Li // CHECK-NEXT: </dict> 62*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 63*67e74705SXin Li // CHECK-NEXT: <array> 64*67e74705SXin Li // CHECK-NEXT: <array> 65*67e74705SXin Li // CHECK-NEXT: <dict> 66*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 67*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 68*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 69*67e74705SXin Li // CHECK-NEXT: </dict> 70*67e74705SXin Li // CHECK-NEXT: <dict> 71*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>12</integer> 72*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 73*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 74*67e74705SXin Li // CHECK-NEXT: </dict> 75*67e74705SXin Li // CHECK-NEXT: </array> 76*67e74705SXin Li // CHECK-NEXT: </array> 77*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>0</integer> 78*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 79*67e74705SXin Li // CHECK-NEXT: <string>The value 0 is assigned to field ''</string> 80*67e74705SXin Li // CHECK-NEXT: <key>message</key> 81*67e74705SXin Li // CHECK-NEXT: <string>The value 0 is assigned to field ''</string> 82*67e74705SXin Li // CHECK-NEXT: </dict> 83*67e74705SXin Li // CHECK-NEXT: <dict> 84*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 85*67e74705SXin Li // CHECK-NEXT: <key>location</key> 86*67e74705SXin Li // CHECK-NEXT: <dict> 87*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 88*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 89*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 90*67e74705SXin Li // CHECK-NEXT: </dict> 91*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 92*67e74705SXin Li // CHECK-NEXT: <array> 93*67e74705SXin Li // CHECK-NEXT: <array> 94*67e74705SXin Li // CHECK-NEXT: <dict> 95*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 96*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 97*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 98*67e74705SXin Li // CHECK-NEXT: </dict> 99*67e74705SXin Li // CHECK-NEXT: <dict> 100*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>12</integer> 101*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 102*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 103*67e74705SXin Li // CHECK-NEXT: </dict> 104*67e74705SXin Li // CHECK-NEXT: </array> 105*67e74705SXin Li // CHECK-NEXT: </array> 106*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>0</integer> 107*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 108*67e74705SXin Li // CHECK-NEXT: <string>Calling 'operator()'</string> 109*67e74705SXin Li // CHECK-NEXT: <key>message</key> 110*67e74705SXin Li // CHECK-NEXT: <string>Calling 'operator()'</string> 111*67e74705SXin Li // CHECK-NEXT: </dict> 112*67e74705SXin Li // CHECK-NEXT: <dict> 113*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 114*67e74705SXin Li // CHECK-NEXT: <key>location</key> 115*67e74705SXin Li // CHECK-NEXT: <dict> 116*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 117*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 118*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 119*67e74705SXin Li // CHECK-NEXT: </dict> 120*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>1</integer> 121*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 122*67e74705SXin Li // CHECK-NEXT: <string>Entered call from 'diagnosticFromLambda'</string> 123*67e74705SXin Li // CHECK-NEXT: <key>message</key> 124*67e74705SXin Li // CHECK-NEXT: <string>Entered call from 'diagnosticFromLambda'</string> 125*67e74705SXin Li // CHECK-NEXT: </dict> 126*67e74705SXin Li // CHECK-NEXT: <dict> 127*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>control</string> 128*67e74705SXin Li // CHECK-NEXT: <key>edges</key> 129*67e74705SXin Li // CHECK-NEXT: <array> 130*67e74705SXin Li // CHECK-NEXT: <dict> 131*67e74705SXin Li // CHECK-NEXT: <key>start</key> 132*67e74705SXin Li // CHECK-NEXT: <array> 133*67e74705SXin Li // CHECK-NEXT: <dict> 134*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 135*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 136*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 137*67e74705SXin Li // CHECK-NEXT: </dict> 138*67e74705SXin Li // CHECK-NEXT: <dict> 139*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 140*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</integer> 141*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 142*67e74705SXin Li // CHECK-NEXT: </dict> 143*67e74705SXin Li // CHECK-NEXT: </array> 144*67e74705SXin Li // CHECK-NEXT: <key>end</key> 145*67e74705SXin Li // CHECK-NEXT: <array> 146*67e74705SXin Li // CHECK-NEXT: <dict> 147*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 148*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>14</integer> 149*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 150*67e74705SXin Li // CHECK-NEXT: </dict> 151*67e74705SXin Li // CHECK-NEXT: <dict> 152*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 153*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>14</integer> 154*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 155*67e74705SXin Li // CHECK-NEXT: </dict> 156*67e74705SXin Li // CHECK-NEXT: </array> 157*67e74705SXin Li // CHECK-NEXT: </dict> 158*67e74705SXin Li // CHECK-NEXT: </array> 159*67e74705SXin Li // CHECK-NEXT: </dict> 160*67e74705SXin Li // CHECK-NEXT: <dict> 161*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 162*67e74705SXin Li // CHECK-NEXT: <key>location</key> 163*67e74705SXin Li // CHECK-NEXT: <dict> 164*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 165*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>14</integer> 166*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 167*67e74705SXin Li // CHECK-NEXT: </dict> 168*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 169*67e74705SXin Li // CHECK-NEXT: <array> 170*67e74705SXin Li // CHECK-NEXT: <array> 171*67e74705SXin Li // CHECK-NEXT: <dict> 172*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 173*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>13</integer> 174*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 175*67e74705SXin Li // CHECK-NEXT: </dict> 176*67e74705SXin Li // CHECK-NEXT: <dict> 177*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 178*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>15</integer> 179*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 180*67e74705SXin Li // CHECK-NEXT: </dict> 181*67e74705SXin Li // CHECK-NEXT: </array> 182*67e74705SXin Li // CHECK-NEXT: </array> 183*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>1</integer> 184*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 185*67e74705SXin Li // CHECK-NEXT: <string>Division by zero</string> 186*67e74705SXin Li // CHECK-NEXT: <key>message</key> 187*67e74705SXin Li // CHECK-NEXT: <string>Division by zero</string> 188*67e74705SXin Li // CHECK-NEXT: </dict> 189*67e74705SXin Li // CHECK-NEXT: </array> 190*67e74705SXin Li // CHECK-NEXT: <key>description</key><string>Division by zero</string> 191*67e74705SXin Li // CHECK-NEXT: <key>category</key><string>Logic error</string> 192*67e74705SXin Li // CHECK-NEXT: <key>type</key><string>Division by zero</string> 193*67e74705SXin Li // CHECK-NEXT: <key>check_name</key><string>core.DivideZero</string> 194*67e74705SXin Li // CHECK-NEXT: <!-- This hash is experimental and going to change! --> 195*67e74705SXin Li // CHECK-NEXT: <key>issue_hash_content_of_line_in_context</key><string>bd4eed3234018edced5efc2ed5562a74</string> 196*67e74705SXin Li // CHECK-NEXT: <key>issue_context_kind</key><string>C++ method</string> 197*67e74705SXin Li // CHECK-NEXT: <key>issue_context</key><string>operator()</string> 198*67e74705SXin Li // CHECK-NEXT: <key>issue_hash_function_offset</key><string>1</string> 199*67e74705SXin Li // CHECK-NEXT: <key>location</key> 200*67e74705SXin Li // CHECK-NEXT: <dict> 201*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 202*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>14</integer> 203*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 204*67e74705SXin Li // CHECK-NEXT: </dict> 205*67e74705SXin Li // CHECK-NEXT: </dict> 206*67e74705SXin Li // CHECK-NEXT: </array> 207