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
test_calling_unimportant_callee(int argc,char * argv[])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