undef-value-caller.c revision d5edd849b6003b97e0e1ee5cf964c10affbe6bce
1// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist -o %t %s 2// RUN: FileCheck --input-file %t %s 3 4#include "undef-value-callee.h" 5 6// This code used to cause a crash since we were not adding fileID of the header to the plist diagnostic. 7// Note, in the future, we do not even need to step into this callee since it does not influence the result. 8int test_calling_unimportant_callee(int argc, char *argv[]) { 9 int x; 10 callee(); 11 return x; // expected-warning {{Undefined or garbage value returned to caller}} 12} 13//CHECK: <dict> 14//CHECK: <key>files</key> 15//CHECK: <array> 16//CHECK: </array> 17//CHECK: <key>diagnostics</key> 18//CHECK: <array> 19//CHECK: <dict> 20//CHECK: <key>path</key> 21//CHECK: <array> 22//CHECK: <dict> 23//CHECK: <key>kind</key><string>event</string> 24//CHECK: <key>location</key> 25//CHECK: <dict> 26//CHECK: <key>line</key><integer>9</integer> 27//CHECK: <key>col</key><integer>3</integer> 28//CHECK: <key>file</key><integer>0</integer> 29//CHECK: </dict> 30//CHECK: <key>ranges</key> 31//CHECK: <array> 32//CHECK: <array> 33//CHECK: <dict> 34//CHECK: <key>line</key><integer>9</integer> 35//CHECK: <key>col</key><integer>3</integer> 36//CHECK: <key>file</key><integer>0</integer> 37//CHECK: </dict> 38//CHECK: <dict> 39//CHECK: <key>line</key><integer>9</integer> 40//CHECK: <key>col</key><integer>7</integer> 41//CHECK: <key>file</key><integer>0</integer> 42//CHECK: </dict> 43//CHECK: </array> 44//CHECK: </array> 45//CHECK: <key>depth</key><integer>0</integer> 46//CHECK: <key>extended_message</key> 47//CHECK: <string>Variable 'x' declared without an initial value</string> 48//CHECK: <key>message</key> 49//CHECK: <string>Variable 'x' declared without an initial value</string> 50//CHECK: </dict> 51//CHECK: <dict> 52//CHECK: <key>kind</key><string>control</string> 53//CHECK: <key>edges</key> 54//CHECK: <array> 55//CHECK: <dict> 56//CHECK: <key>start</key> 57//CHECK: <array> 58//CHECK: <dict> 59//CHECK: <key>line</key><integer>9</integer> 60//CHECK: <key>col</key><integer>3</integer> 61//CHECK: <key>file</key><integer>0</integer> 62//CHECK: </dict> 63//CHECK: <dict> 64//CHECK: <key>line</key><integer>9</integer> 65//CHECK: <key>col</key><integer>7</integer> 66//CHECK: <key>file</key><integer>0</integer> 67//CHECK: </dict> 68//CHECK: </array> 69//CHECK: <key>end</key> 70//CHECK: <array> 71//CHECK: <dict> 72//CHECK: <key>line</key><integer>10</integer> 73//CHECK: <key>col</key><integer>3</integer> 74//CHECK: <key>file</key><integer>0</integer> 75//CHECK: </dict> 76//CHECK: <dict> 77//CHECK: <key>line</key><integer>10</integer> 78//CHECK: <key>col</key><integer>3</integer> 79//CHECK: <key>file</key><integer>0</integer> 80//CHECK: </dict> 81//CHECK: </array> 82//CHECK: </dict> 83//CHECK: </array> 84//CHECK: </dict> 85//CHECK: <dict> 86//CHECK: <key>kind</key><string>event</string> 87//CHECK: <key>location</key> 88//CHECK: <dict> 89//CHECK: <key>line</key><integer>10</integer> 90//CHECK: <key>col</key><integer>3</integer> 91//CHECK: <key>file</key><integer>0</integer> 92//CHECK: </dict> 93//CHECK: <key>ranges</key> 94//CHECK: <array> 95//CHECK: <array> 96//CHECK: <dict> 97//CHECK: <key>line</key><integer>10</integer> 98//CHECK: <key>col</key><integer>3</integer> 99//CHECK: <key>file</key><integer>0</integer> 100//CHECK: </dict> 101//CHECK: <dict> 102//CHECK: <key>line</key><integer>10</integer> 103//CHECK: <key>col</key><integer>10</integer> 104//CHECK: <key>file</key><integer>0</integer> 105//CHECK: </dict> 106//CHECK: </array> 107//CHECK: </array> 108//CHECK: <key>depth</key><integer>0</integer> 109//CHECK: <key>extended_message</key> 110//CHECK: <string>Calling 'callee'</string> 111//CHECK: <key>message</key> 112//CHECK: <string>Calling 'callee'</string> 113//CHECK: </dict> 114//CHECK: <dict> 115//CHECK: <key>kind</key><string>event</string> 116//CHECK: <key>location</key> 117//CHECK: <dict> 118//CHECK: <key>line</key><integer>2</integer> 119//CHECK: <key>col</key><integer>1</integer> 120//CHECK: <key>file</key><integer>1</integer> 121//CHECK: </dict> 122//CHECK: <key>depth</key><integer>1</integer> 123//CHECK: <key>extended_message</key> 124//CHECK: <string>Entered call from 'test_calling_unimportant_callee'</string> 125//CHECK: <key>message</key> 126//CHECK: <string>Entered call from 'test_calling_unimportant_callee'</string> 127//CHECK: </dict> 128//CHECK: <dict> 129//CHECK: <key>kind</key><string>event</string> 130//CHECK: <key>location</key> 131//CHECK: <dict> 132//CHECK: <key>line</key><integer>10</integer> 133//CHECK: <key>col</key><integer>3</integer> 134//CHECK: <key>file</key><integer>0</integer> 135//CHECK: </dict> 136//CHECK: <key>ranges</key> 137//CHECK: <array> 138//CHECK: <array> 139//CHECK: <dict> 140//CHECK: <key>line</key><integer>10</integer> 141//CHECK: <key>col</key><integer>3</integer> 142//CHECK: <key>file</key><integer>0</integer> 143//CHECK: </dict> 144//CHECK: <dict> 145//CHECK: <key>line</key><integer>10</integer> 146//CHECK: <key>col</key><integer>10</integer> 147//CHECK: <key>file</key><integer>0</integer> 148//CHECK: </dict> 149//CHECK: </array> 150//CHECK: </array> 151//CHECK: <key>depth</key><integer>1</integer> 152//CHECK: <key>extended_message</key> 153//CHECK: <string>Returning from 'callee'</string> 154//CHECK: <key>message</key> 155//CHECK: <string>Returning from 'callee'</string> 156//CHECK: </dict> 157//CHECK: <dict> 158//CHECK: <key>kind</key><string>control</string> 159//CHECK: <key>edges</key> 160//CHECK: <array> 161//CHECK: <dict> 162//CHECK: <key>start</key> 163//CHECK: <array> 164//CHECK: <dict> 165//CHECK: <key>line</key><integer>10</integer> 166//CHECK: <key>col</key><integer>3</integer> 167//CHECK: <key>file</key><integer>0</integer> 168//CHECK: </dict> 169//CHECK: <dict> 170//CHECK: <key>line</key><integer>10</integer> 171//CHECK: <key>col</key><integer>10</integer> 172//CHECK: <key>file</key><integer>0</integer> 173//CHECK: </dict> 174//CHECK: </array> 175//CHECK: <key>end</key> 176//CHECK: <array> 177//CHECK: <dict> 178//CHECK: <key>line</key><integer>11</integer> 179//CHECK: <key>col</key><integer>3</integer> 180//CHECK: <key>file</key><integer>0</integer> 181//CHECK: </dict> 182//CHECK: <dict> 183//CHECK: <key>line</key><integer>11</integer> 184//CHECK: <key>col</key><integer>10</integer> 185//CHECK: <key>file</key><integer>0</integer> 186//CHECK: </dict> 187//CHECK: </array> 188//CHECK: </dict> 189//CHECK: </array> 190//CHECK: </dict> 191//CHECK: <dict> 192//CHECK: <key>kind</key><string>event</string> 193//CHECK: <key>location</key> 194//CHECK: <dict> 195//CHECK: <key>line</key><integer>11</integer> 196//CHECK: <key>col</key><integer>3</integer> 197//CHECK: <key>file</key><integer>0</integer> 198//CHECK: </dict> 199//CHECK: <key>ranges</key> 200//CHECK: <array> 201//CHECK: <array> 202//CHECK: <dict> 203//CHECK: <key>line</key><integer>11</integer> 204//CHECK: <key>col</key><integer>10</integer> 205//CHECK: <key>file</key><integer>0</integer> 206//CHECK: </dict> 207//CHECK: <dict> 208//CHECK: <key>line</key><integer>11</integer> 209//CHECK: <key>col</key><integer>10</integer> 210//CHECK: <key>file</key><integer>0</integer> 211//CHECK: </dict> 212//CHECK: </array> 213//CHECK: </array> 214//CHECK: <key>depth</key><integer>0</integer> 215//CHECK: <key>extended_message</key> 216//CHECK: <string>Undefined or garbage value returned to caller</string> 217//CHECK: <key>message</key> 218//CHECK: <string>Undefined or garbage value returned to caller</string> 219//CHECK: </dict> 220//CHECK: </array> 221//CHECK: <key>description</key><string>Undefined or garbage value returned to caller</string> 222//CHECK: <key>category</key><string>Logic error</string> 223//CHECK: <key>type</key><string>Garbage return value</string> 224//CHECK: <key>issue_context_kind</key><string>function</string> 225//CHECK: <key>issue_context</key><string>test_calling_unimportant_callee</string> 226//CHECK: <key>location</key> 227//CHECK: <dict> 228//CHECK: <key>line</key><integer>11</integer> 229//CHECK: <key>col</key><integer>3</integer> 230//CHECK: <key>file</key><integer>0</integer> 231//CHECK: </dict> 232//CHECK: </dict> 233//CHECK: </array> 234//CHECK: </dict> 235//CHECK: </plist> 236