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 8 int 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 14 //CHECK: <dict> 15 //CHECK: <key>files</key> 16 //CHECK: <array> 17 //CHECK: </array> 18 //CHECK: <key>diagnostics</key> 19 //CHECK: <array> 20 //CHECK: <dict> 21 //CHECK: <key>path</key> 22 //CHECK: <array> 23 //CHECK: <dict> 24 //CHECK: <key>kind</key><string>event</string> 25 //CHECK: <key>location</key> 26 //CHECK: <dict> 27 //CHECK: <key>line</key><integer>9</integer> 28 //CHECK: <key>col</key><integer>3</integer> 29 //CHECK: <key>file</key><integer>0</integer> 30 //CHECK: </dict> 31 //CHECK: <key>ranges</key> 32 //CHECK: <array> 33 //CHECK: <array> 34 //CHECK: <dict> 35 //CHECK: <key>line</key><integer>9</integer> 36 //CHECK: <key>col</key><integer>3</integer> 37 //CHECK: <key>file</key><integer>0</integer> 38 //CHECK: </dict> 39 //CHECK: <dict> 40 //CHECK: <key>line</key><integer>9</integer> 41 //CHECK: <key>col</key><integer>7</integer> 42 //CHECK: <key>file</key><integer>0</integer> 43 //CHECK: </dict> 44 //CHECK: </array> 45 //CHECK: </array> 46 //CHECK: <key>depth</key><integer>0</integer> 47 //CHECK: <key>extended_message</key> 48 //CHECK: <string>Variable 'x' declared without an initial value</string> 49 //CHECK: <key>message</key> 50 //CHECK: <string>Variable 'x' declared without an initial value</string> 51 //CHECK: </dict> 52 //CHECK: <dict> 53 //CHECK: <key>kind</key><string>control</string> 54 //CHECK: <key>edges</key> 55 //CHECK: <array> 56 //CHECK: <dict> 57 //CHECK: <key>start</key> 58 //CHECK: <array> 59 //CHECK: <dict> 60 //CHECK: <key>line</key><integer>9</integer> 61 //CHECK: <key>col</key><integer>3</integer> 62 //CHECK: <key>file</key><integer>0</integer> 63 //CHECK: </dict> 64 //CHECK: <dict> 65 //CHECK: <key>line</key><integer>9</integer> 66 //CHECK: <key>col</key><integer>5</integer> 67 //CHECK: <key>file</key><integer>0</integer> 68 //CHECK: </dict> 69 //CHECK: </array> 70 //CHECK: <key>end</key> 71 //CHECK: <array> 72 //CHECK: <dict> 73 //CHECK: <key>line</key><integer>10</integer> 74 //CHECK: <key>col</key><integer>3</integer> 75 //CHECK: <key>file</key><integer>0</integer> 76 //CHECK: </dict> 77 //CHECK: <dict> 78 //CHECK: <key>line</key><integer>10</integer> 79 //CHECK: <key>col</key><integer>8</integer> 80 //CHECK: <key>file</key><integer>0</integer> 81 //CHECK: </dict> 82 //CHECK: </array> 83 //CHECK: </dict> 84 //CHECK: </array> 85 //CHECK: </dict> 86 //CHECK: <dict> 87 //CHECK: <key>kind</key><string>control</string> 88 //CHECK: <key>edges</key> 89 //CHECK: <array> 90 //CHECK: <dict> 91 //CHECK: <key>start</key> 92 //CHECK: <array> 93 //CHECK: <dict> 94 //CHECK: <key>line</key><integer>10</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>10</integer> 100 //CHECK: <key>col</key><integer>8</integer> 101 //CHECK: <key>file</key><integer>0</integer> 102 //CHECK: </dict> 103 //CHECK: </array> 104 //CHECK: <key>end</key> 105 //CHECK: <array> 106 //CHECK: <dict> 107 //CHECK: <key>line</key><integer>11</integer> 108 //CHECK: <key>col</key><integer>3</integer> 109 //CHECK: <key>file</key><integer>0</integer> 110 //CHECK: </dict> 111 //CHECK: <dict> 112 //CHECK: <key>line</key><integer>11</integer> 113 //CHECK: <key>col</key><integer>8</integer> 114 //CHECK: <key>file</key><integer>0</integer> 115 //CHECK: </dict> 116 //CHECK: </array> 117 //CHECK: </dict> 118 //CHECK: </array> 119 //CHECK: </dict> 120 //CHECK: <dict> 121 //CHECK: <key>kind</key><string>event</string> 122 //CHECK: <key>location</key> 123 //CHECK: <dict> 124 //CHECK: <key>line</key><integer>11</integer> 125 //CHECK: <key>col</key><integer>3</integer> 126 //CHECK: <key>file</key><integer>0</integer> 127 //CHECK: </dict> 128 //CHECK: <key>ranges</key> 129 //CHECK: <array> 130 //CHECK: <array> 131 //CHECK: <dict> 132 //CHECK: <key>line</key><integer>11</integer> 133 //CHECK: <key>col</key><integer>10</integer> 134 //CHECK: <key>file</key><integer>0</integer> 135 //CHECK: </dict> 136 //CHECK: <dict> 137 //CHECK: <key>line</key><integer>11</integer> 138 //CHECK: <key>col</key><integer>10</integer> 139 //CHECK: <key>file</key><integer>0</integer> 140 //CHECK: </dict> 141 //CHECK: </array> 142 //CHECK: </array> 143 //CHECK: <key>depth</key><integer>0</integer> 144 //CHECK: <key>extended_message</key> 145 //CHECK: <string>Undefined or garbage value returned to caller</string> 146 //CHECK: <key>message</key> 147 //CHECK: <string>Undefined or garbage value returned to caller</string> 148 //CHECK: </dict> 149 //CHECK: </array> 150 //CHECK: <key>description</key><string>Undefined or garbage value returned to caller</string> 151 //CHECK: <key>category</key><string>Logic error</string> 152 //CHECK: <key>type</key><string>Garbage return value</string> 153 //CHECK: <key>issue_context_kind</key><string>function</string> 154 //CHECK: <key>issue_context</key><string>test_calling_unimportant_callee</string> 155 //CHECK: <key>issue_hash</key><integer>3</integer> 156 //CHECK: <key>location</key> 157 //CHECK: <dict> 158 //CHECK: <key>line</key><integer>11</integer> 159 //CHECK: <key>col</key><integer>3</integer> 160 //CHECK: <key>file</key><integer>0</integer> 161 //CHECK: </dict> 162 //CHECK: </dict> 163 //CHECK: </array> 164 //CHECK: </dict> 165 //CHECK: </plist> 166