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