blob: d8348ad05da2c805ba6bb3295ca224bcf48fa72a [file] [log] [blame]
Anna Zaks4ff90972012-06-04 21:03:31 +00001// 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>
Anna Zaks4ff90972012-06-04 21:03:31 +000016//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 &apos;x&apos; declared without an initial value</string>
48//CHECK: <key>message</key>
49//CHECK: <string>Variable &apos;x&apos; 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 &apos;callee&apos;</string>
111//CHECK: <key>message</key>
112//CHECK: <string>Calling &apos;callee&apos;</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 &apos;test_calling_unimportant_callee&apos;</string>
125//CHECK: <key>message</key>
126//CHECK: <string>Entered call from &apos;test_calling_unimportant_callee&apos;</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 &apos;callee&apos;</string>
154//CHECK: <key>message</key>
155//CHECK: <string>Returning from &apos;callee&apos;</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>