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 &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>
236