1*67e74705SXin Li // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist -analyzer-config path-diagnostics-alternate=false -o %t %s 2*67e74705SXin Li // RUN: FileCheck --input-file %t %s 3*67e74705SXin Li 4*67e74705SXin Li #include "undef-value-callee.h" 5*67e74705SXin Li 6*67e74705SXin Li // This code used to cause a crash since we were not adding fileID of the header to the plist diagnostic. 7*67e74705SXin Li test_calling_unimportant_callee(int argc,char * argv[])8*67e74705SXin Liint test_calling_unimportant_callee(int argc, char *argv[]) { 9*67e74705SXin Li int x; 10*67e74705SXin Li callee(); 11*67e74705SXin Li return x; // expected-warning {{Undefined or garbage value returned to caller}} 12*67e74705SXin Li } 13*67e74705SXin Li 14*67e74705SXin Li // CHECK: <key>diagnostics</key> 15*67e74705SXin Li // CHECK-NEXT: <array> 16*67e74705SXin Li // CHECK-NEXT: <dict> 17*67e74705SXin Li // CHECK-NEXT: <key>path</key> 18*67e74705SXin Li // CHECK-NEXT: <array> 19*67e74705SXin Li // CHECK-NEXT: <dict> 20*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 21*67e74705SXin Li // CHECK-NEXT: <key>location</key> 22*67e74705SXin Li // CHECK-NEXT: <dict> 23*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 24*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 25*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 26*67e74705SXin Li // CHECK-NEXT: </dict> 27*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 28*67e74705SXin Li // CHECK-NEXT: <array> 29*67e74705SXin Li // CHECK-NEXT: <array> 30*67e74705SXin Li // CHECK-NEXT: <dict> 31*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 32*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 33*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 34*67e74705SXin Li // CHECK-NEXT: </dict> 35*67e74705SXin Li // CHECK-NEXT: <dict> 36*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 37*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>7</integer> 38*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 39*67e74705SXin Li // CHECK-NEXT: </dict> 40*67e74705SXin Li // CHECK-NEXT: </array> 41*67e74705SXin Li // CHECK-NEXT: </array> 42*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>0</integer> 43*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 44*67e74705SXin Li // CHECK-NEXT: <string>'x' declared without an initial value</string> 45*67e74705SXin Li // CHECK-NEXT: <key>message</key> 46*67e74705SXin Li // CHECK-NEXT: <string>'x' declared without an initial value</string> 47*67e74705SXin Li // CHECK-NEXT: </dict> 48*67e74705SXin Li // CHECK-NEXT: <dict> 49*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>control</string> 50*67e74705SXin Li // CHECK-NEXT: <key>edges</key> 51*67e74705SXin Li // CHECK-NEXT: <array> 52*67e74705SXin Li // CHECK-NEXT: <dict> 53*67e74705SXin Li // CHECK-NEXT: <key>start</key> 54*67e74705SXin Li // CHECK-NEXT: <array> 55*67e74705SXin Li // CHECK-NEXT: <dict> 56*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>9</integer> 57*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</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>9</integer> 62*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>5</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: <key>end</key> 67*67e74705SXin Li // CHECK-NEXT: <array> 68*67e74705SXin Li // CHECK-NEXT: <dict> 69*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 70*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 71*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 72*67e74705SXin Li // CHECK-NEXT: </dict> 73*67e74705SXin Li // CHECK-NEXT: <dict> 74*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 75*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>8</integer> 76*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 77*67e74705SXin Li // CHECK-NEXT: </dict> 78*67e74705SXin Li // CHECK-NEXT: </array> 79*67e74705SXin Li // CHECK-NEXT: </dict> 80*67e74705SXin Li // CHECK-NEXT: </array> 81*67e74705SXin Li // CHECK-NEXT: </dict> 82*67e74705SXin Li // CHECK-NEXT: <dict> 83*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>control</string> 84*67e74705SXin Li // CHECK-NEXT: <key>edges</key> 85*67e74705SXin Li // CHECK-NEXT: <array> 86*67e74705SXin Li // CHECK-NEXT: <dict> 87*67e74705SXin Li // CHECK-NEXT: <key>start</key> 88*67e74705SXin Li // CHECK-NEXT: <array> 89*67e74705SXin Li // CHECK-NEXT: <dict> 90*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 91*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 92*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 93*67e74705SXin Li // CHECK-NEXT: </dict> 94*67e74705SXin Li // CHECK-NEXT: <dict> 95*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>10</integer> 96*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>8</integer> 97*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 98*67e74705SXin Li // CHECK-NEXT: </dict> 99*67e74705SXin Li // CHECK-NEXT: </array> 100*67e74705SXin Li // CHECK-NEXT: <key>end</key> 101*67e74705SXin Li // CHECK-NEXT: <array> 102*67e74705SXin Li // CHECK-NEXT: <dict> 103*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>11</integer> 104*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 105*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 106*67e74705SXin Li // CHECK-NEXT: </dict> 107*67e74705SXin Li // CHECK-NEXT: <dict> 108*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>11</integer> 109*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>8</integer> 110*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 111*67e74705SXin Li // CHECK-NEXT: </dict> 112*67e74705SXin Li // CHECK-NEXT: </array> 113*67e74705SXin Li // CHECK-NEXT: </dict> 114*67e74705SXin Li // CHECK-NEXT: </array> 115*67e74705SXin Li // CHECK-NEXT: </dict> 116*67e74705SXin Li // CHECK-NEXT: <dict> 117*67e74705SXin Li // CHECK-NEXT: <key>kind</key><string>event</string> 118*67e74705SXin Li // CHECK-NEXT: <key>location</key> 119*67e74705SXin Li // CHECK-NEXT: <dict> 120*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>11</integer> 121*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 122*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 123*67e74705SXin Li // CHECK-NEXT: </dict> 124*67e74705SXin Li // CHECK-NEXT: <key>ranges</key> 125*67e74705SXin Li // CHECK-NEXT: <array> 126*67e74705SXin Li // CHECK-NEXT: <array> 127*67e74705SXin Li // CHECK-NEXT: <dict> 128*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>11</integer> 129*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>10</integer> 130*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 131*67e74705SXin Li // CHECK-NEXT: </dict> 132*67e74705SXin Li // CHECK-NEXT: <dict> 133*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>11</integer> 134*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>10</integer> 135*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 136*67e74705SXin Li // CHECK-NEXT: </dict> 137*67e74705SXin Li // CHECK-NEXT: </array> 138*67e74705SXin Li // CHECK-NEXT: </array> 139*67e74705SXin Li // CHECK-NEXT: <key>depth</key><integer>0</integer> 140*67e74705SXin Li // CHECK-NEXT: <key>extended_message</key> 141*67e74705SXin Li // CHECK-NEXT: <string>Undefined or garbage value returned to caller</string> 142*67e74705SXin Li // CHECK-NEXT: <key>message</key> 143*67e74705SXin Li // CHECK-NEXT: <string>Undefined or garbage value returned to caller</string> 144*67e74705SXin Li // CHECK-NEXT: </dict> 145*67e74705SXin Li // CHECK-NEXT: </array> 146*67e74705SXin Li // CHECK-NEXT: <key>description</key><string>Undefined or garbage value returned to caller</string> 147*67e74705SXin Li // CHECK-NEXT: <key>category</key><string>Logic error</string> 148*67e74705SXin Li // CHECK-NEXT: <key>type</key><string>Garbage return value</string> 149*67e74705SXin Li // CHECK-NEXT: <key>check_name</key><string>core.uninitialized.UndefReturn</string> 150*67e74705SXin Li // CHECK-NEXT: <!-- This hash is experimental and going to change! --> 151*67e74705SXin Li // CHECK-NEXT: <key>issue_hash_content_of_line_in_context</key><string>1ef750c5562c09a467ea54ea4b4de771</string> 152*67e74705SXin Li // CHECK-NEXT: <key>issue_context_kind</key><string>function</string> 153*67e74705SXin Li // CHECK-NEXT: <key>issue_context</key><string>test_calling_unimportant_callee</string> 154*67e74705SXin Li // CHECK-NEXT: <key>issue_hash_function_offset</key><string>3</string> 155*67e74705SXin Li // CHECK-NEXT: <key>location</key> 156*67e74705SXin Li // CHECK-NEXT: <dict> 157*67e74705SXin Li // CHECK-NEXT: <key>line</key><integer>11</integer> 158*67e74705SXin Li // CHECK-NEXT: <key>col</key><integer>3</integer> 159*67e74705SXin Li // CHECK-NEXT: <key>file</key><integer>0</integer> 160*67e74705SXin Li // CHECK-NEXT: </dict> 161*67e74705SXin Li // CHECK-NEXT: </dict> 162*67e74705SXin Li // CHECK-NEXT: </array> 163