[PATCH] Add test cases for __context__ statement and context attribute
[smatch.git] / validation / context.c
blob165d4f63c0bf29d1837f1207c092b7fae64d67b2
1 void a(void) __attribute__((context(0,1)))
3 __context__(1);
6 void r(void) __attribute__((context(1,0)))
8 __context__(-1);
11 void good_paired1(void)
13 a();
14 r();
17 void good_paired2(void)
19 a();
20 r();
21 a();
22 r();
25 void good_paired3(void)
27 a();
28 a();
29 r();
30 r();
33 void good_lock1(void) __attribute__((context(0,1)))
35 a();
38 void good_lock2(void) __attribute__((context(0,1)))
40 a();
41 r();
42 a();
45 void good_lock3(void) __attribute__((context(0,1)))
47 a();
48 a();
49 r();
52 void good_unlock1(void) __attribute__((context(1,0)))
54 r();
57 void good_unlock2(void) __attribute__((context(1,0)))
59 a();
60 r();
61 r();
64 void warn_lock1(void)
66 a();
69 void warn_lock2(void)
71 a();
72 r();
73 a();
76 void warn_lock3(void)
78 a();
79 a();
80 r();
83 void warn_unlock1(void)
85 r();
88 void warn_unlock2(void)
90 a();
91 r();
92 r();
95 extern int condition, condition2;
97 int good_if1(void)
99 a();
100 if(condition) {
101 r();
102 return -1;
104 r();
105 return 0;
108 void good_if2(void)
110 if(condition) {
111 a();
112 r();
116 void good_if3(void)
118 a();
119 if(condition) {
120 a();
121 r();
123 r();
126 int warn_if1(void)
128 a();
129 if(condition)
130 return -1;
131 r();
132 return 0;
135 int warn_if2(void)
137 a();
138 if(condition) {
139 r();
140 return -1;
142 return 0;
145 void good_while1(void)
147 a();
148 while(condition)
150 r();
153 void good_while2(void)
155 while(condition) {
156 a();
157 r();
161 void good_while3(void)
163 while(condition) {
164 a();
165 r();
166 if(condition2)
167 break;
168 a();
169 r();
173 void good_while4(void)
175 a();
176 while(1) {
177 if(condition2) {
178 r();
179 break;
184 void good_while5(void)
186 a();
187 while(1) {
188 r();
189 if(condition2)
190 break;
191 a();
195 void warn_while1(void)
197 while(condition) {
198 a();
202 void warn_while2(void)
204 while(condition) {
205 r();
209 void warn_while3(void)
211 while(condition) {
212 a();
213 if(condition2)
214 break;
215 r();
219 void good_goto1(void)
221 a();
222 goto label;
223 label:
224 r();
227 void good_goto2(void)
229 a();
230 goto label;
231 a();
232 r();
233 label:
234 r();
237 void good_goto3(void)
239 a();
240 if(condition)
241 goto label;
242 a();
243 r();
244 label:
245 r();
248 void good_goto4(void)
250 if(condition)
251 goto label;
252 a();
253 r();
254 label:
258 void good_goto5(void)
260 a();
261 if(condition)
262 goto label;
263 r();
264 return;
265 label:
266 r();
269 void warn_goto1(void)
271 a();
272 goto label;
273 r();
274 label:
278 void warn_goto2(void)
280 a();
281 goto label;
282 r();
283 label:
284 a();
285 r();
288 void warn_goto3(void)
290 a();
291 if(condition)
292 goto label;
293 r();
294 label:
295 r();