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 &apos;x&apos; declared without an initial value</string>
50//CHECK:       <key>message</key>
51//CHECK:  <string>Variable &apos;x&apos; 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 &apos;callee&apos;</string>
113//CHECK:       <key>message</key>
114//CHECK:  <string>Calling &apos;callee&apos;</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 &apos;test_calling_unimportant_callee&apos;</string>
127//CHECK:       <key>message</key>
128//CHECK:  <string>Entered call from &apos;test_calling_unimportant_callee&apos;</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 &apos;callee&apos;</string>
156//CHECK:       <key>message</key>
157//CHECK:  <string>Returning from &apos;callee&apos;</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