undef-value-caller.c revision 0344e5423db6dbb614f057887be714d2c0f7f0f6
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: <string>/Users/anya/workspace/gllvm/llvm/tools/clang/test/Analysis/diagnostics/undef-value-caller.c</string> 17//CHECK: <string>/Users/anya/workspace/gllvm/llvm/tools/clang/test/Analysis/diagnostics/undef-value-callee.h</string> 18//CHECK: </array> 19//CHECK: <key>diagnostics</key> 20//CHECK: <array> 21//CHECK: <dict> 22//CHECK: <key>path</key> 23//CHECK: <array> 24//CHECK: <dict> 25//CHECK: <key>kind</key><string>event</string> 26//CHECK: <key>location</key> 27//CHECK: <dict> 28//CHECK: <key>line</key><integer>9</integer> 29//CHECK: <key>col</key><integer>3</integer> 30//CHECK: <key>file</key><integer>0</integer> 31//CHECK: </dict> 32//CHECK: <key>ranges</key> 33//CHECK: <array> 34//CHECK: <array> 35//CHECK: <dict> 36//CHECK: <key>line</key><integer>9</integer> 37//CHECK: <key>col</key><integer>3</integer> 38//CHECK: <key>file</key><integer>0</integer> 39//CHECK: </dict> 40//CHECK: <dict> 41//CHECK: <key>line</key><integer>9</integer> 42//CHECK: <key>col</key><integer>7</integer> 43//CHECK: <key>file</key><integer>0</integer> 44//CHECK: </dict> 45//CHECK: </array> 46//CHECK: </array> 47//CHECK: <key>depth</key><integer>0</integer> 48//CHECK: <key>extended_message</key> 49//CHECK: <string>Variable 'x' declared without an initial value</string> 50//CHECK: <key>message</key> 51//CHECK: <string>Variable 'x' declared without an initial value</string> 52//CHECK: </dict> 53//CHECK: <dict> 54//CHECK: <key>kind</key><string>control</string> 55//CHECK: <key>edges</key> 56//CHECK: <array> 57//CHECK: <dict> 58//CHECK: <key>start</key> 59//CHECK: <array> 60//CHECK: <dict> 61//CHECK: <key>line</key><integer>9</integer> 62//CHECK: <key>col</key><integer>3</integer> 63//CHECK: <key>file</key><integer>0</integer> 64//CHECK: </dict> 65//CHECK: <dict> 66//CHECK: <key>line</key><integer>9</integer> 67//CHECK: <key>col</key><integer>7</integer> 68//CHECK: <key>file</key><integer>0</integer> 69//CHECK: </dict> 70//CHECK: </array> 71//CHECK: <key>end</key> 72//CHECK: <array> 73//CHECK: <dict> 74//CHECK: <key>line</key><integer>10</integer> 75//CHECK: <key>col</key><integer>3</integer> 76//CHECK: <key>file</key><integer>0</integer> 77//CHECK: </dict> 78//CHECK: <dict> 79//CHECK: <key>line</key><integer>10</integer> 80//CHECK: <key>col</key><integer>3</integer> 81//CHECK: <key>file</key><integer>0</integer> 82//CHECK: </dict> 83//CHECK: </array> 84//CHECK: </dict> 85//CHECK: </array> 86//CHECK: </dict> 87//CHECK: <dict> 88//CHECK: <key>kind</key><string>event</string> 89//CHECK: <key>location</key> 90//CHECK: <dict> 91//CHECK: <key>line</key><integer>10</integer> 92//CHECK: <key>col</key><integer>3</integer> 93//CHECK: <key>file</key><integer>0</integer> 94//CHECK: </dict> 95//CHECK: <key>ranges</key> 96//CHECK: <array> 97//CHECK: <array> 98//CHECK: <dict> 99//CHECK: <key>line</key><integer>10</integer> 100//CHECK: <key>col</key><integer>3</integer> 101//CHECK: <key>file</key><integer>0</integer> 102//CHECK: </dict> 103//CHECK: <dict> 104//CHECK: <key>line</key><integer>10</integer> 105//CHECK: <key>col</key><integer>10</integer> 106//CHECK: <key>file</key><integer>0</integer> 107//CHECK: </dict> 108//CHECK: </array> 109//CHECK: </array> 110//CHECK: <key>depth</key><integer>0</integer> 111//CHECK: <key>extended_message</key> 112//CHECK: <string>Calling 'callee'</string> 113//CHECK: <key>message</key> 114//CHECK: <string>Calling 'callee'</string> 115//CHECK: </dict> 116//CHECK: <dict> 117//CHECK: <key>kind</key><string>event</string> 118//CHECK: <key>location</key> 119//CHECK: <dict> 120//CHECK: <key>line</key><integer>2</integer> 121//CHECK: <key>col</key><integer>1</integer> 122//CHECK: <key>file</key><integer>1</integer> 123//CHECK: </dict> 124//CHECK: <key>depth</key><integer>1</integer> 125//CHECK: <key>extended_message</key> 126//CHECK: <string>Entered call from 'test_calling_unimportant_callee'</string> 127//CHECK: <key>message</key> 128//CHECK: <string>Entered call from 'test_calling_unimportant_callee'</string> 129//CHECK: </dict> 130//CHECK: <dict> 131//CHECK: <key>kind</key><string>event</string> 132//CHECK: <key>location</key> 133//CHECK: <dict> 134//CHECK: <key>line</key><integer>10</integer> 135//CHECK: <key>col</key><integer>3</integer> 136//CHECK: <key>file</key><integer>0</integer> 137//CHECK: </dict> 138//CHECK: <key>ranges</key> 139//CHECK: <array> 140//CHECK: <array> 141//CHECK: <dict> 142//CHECK: <key>line</key><integer>10</integer> 143//CHECK: <key>col</key><integer>3</integer> 144//CHECK: <key>file</key><integer>0</integer> 145//CHECK: </dict> 146//CHECK: <dict> 147//CHECK: <key>line</key><integer>10</integer> 148//CHECK: <key>col</key><integer>10</integer> 149//CHECK: <key>file</key><integer>0</integer> 150//CHECK: </dict> 151//CHECK: </array> 152//CHECK: </array> 153//CHECK: <key>depth</key><integer>1</integer> 154//CHECK: <key>extended_message</key> 155//CHECK: <string>Returning from 'callee'</string> 156//CHECK: <key>message</key> 157//CHECK: <string>Returning from 'callee'</string> 158//CHECK: </dict> 159//CHECK: <dict> 160//CHECK: <key>kind</key><string>control</string> 161//CHECK: <key>edges</key> 162//CHECK: <array> 163//CHECK: <dict> 164//CHECK: <key>start</key> 165//CHECK: <array> 166//CHECK: <dict> 167//CHECK: <key>line</key><integer>10</integer> 168//CHECK: <key>col</key><integer>3</integer> 169//CHECK: <key>file</key><integer>0</integer> 170//CHECK: </dict> 171//CHECK: <dict> 172//CHECK: <key>line</key><integer>10</integer> 173//CHECK: <key>col</key><integer>10</integer> 174//CHECK: <key>file</key><integer>0</integer> 175//CHECK: </dict> 176//CHECK: </array> 177//CHECK: <key>end</key> 178//CHECK: <array> 179//CHECK: <dict> 180//CHECK: <key>line</key><integer>11</integer> 181//CHECK: <key>col</key><integer>3</integer> 182//CHECK: <key>file</key><integer>0</integer> 183//CHECK: </dict> 184//CHECK: <dict> 185//CHECK: <key>line</key><integer>11</integer> 186//CHECK: <key>col</key><integer>10</integer> 187//CHECK: <key>file</key><integer>0</integer> 188//CHECK: </dict> 189//CHECK: </array> 190//CHECK: </dict> 191//CHECK: </array> 192//CHECK: </dict> 193//CHECK: <dict> 194//CHECK: <key>kind</key><string>event</string> 195//CHECK: <key>location</key> 196//CHECK: <dict> 197//CHECK: <key>line</key><integer>11</integer> 198//CHECK: <key>col</key><integer>3</integer> 199//CHECK: <key>file</key><integer>0</integer> 200//CHECK: </dict> 201//CHECK: <key>ranges</key> 202//CHECK: <array> 203//CHECK: <array> 204//CHECK: <dict> 205//CHECK: <key>line</key><integer>11</integer> 206//CHECK: <key>col</key><integer>10</integer> 207//CHECK: <key>file</key><integer>0</integer> 208//CHECK: </dict> 209//CHECK: <dict> 210//CHECK: <key>line</key><integer>11</integer> 211//CHECK: <key>col</key><integer>10</integer> 212//CHECK: <key>file</key><integer>0</integer> 213//CHECK: </dict> 214//CHECK: </array> 215//CHECK: </array> 216//CHECK: <key>depth</key><integer>0</integer> 217//CHECK: <key>extended_message</key> 218//CHECK: <string>Undefined or garbage value returned to caller</string> 219//CHECK: <key>message</key> 220//CHECK: <string>Undefined or garbage value returned to caller</string> 221//CHECK: </dict> 222//CHECK: </array> 223//CHECK: <key>description</key><string>Undefined or garbage value returned to caller</string> 224//CHECK: <key>category</key><string>Logic error</string> 225//CHECK: <key>type</key><string>Garbage return value</string> 226//CHECK: <key>issue_context_kind</key><string>function</string> 227//CHECK: <key>issue_context</key><string>test_calling_unimportant_callee</string> 228//CHECK: <key>location</key> 229//CHECK: <dict> 230//CHECK: <key>line</key><integer>11</integer> 231//CHECK: <key>col</key><integer>3</integer> 232//CHECK: <key>file</key><integer>0</integer> 233//CHECK: </dict> 234//CHECK: </dict> 235//CHECK: </array> 236//CHECK: </dict> 237//CHECK: </plist> 238