undef-value-caller.c revision c1c6a4981a4b50476d71c88f8dac81a1430885ed
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
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
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 &apos;x&apos; declared without an initial value</string>
49//CHECK:      <key>message</key>
50//CHECK: <string>Variable &apos;x&apos; 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><string>3</string>
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