]>
Commit | Line | Data |
---|---|---|
99a16e04 | 1 | /* |
d8662f2f DDO |
2 | * Copyright 2007-2022 The OpenSSL Project Authors. All Rights Reserved. |
3 | * Copyright Siemens AG 2015-2022 | |
99a16e04 DDO |
4 | * |
5 | * Licensed under the Apache License 2.0 (the "License"). You may not use | |
6 | * this file except in compliance with the License. You can obtain a copy | |
7 | * in the file LICENSE in the source distribution or at | |
8 | * https://www.openssl.org/source/license.html | |
9 | */ | |
10 | ||
11 | /* | |
12 | * This demonstrates/tests cases where check-format.pl should report issues. | |
13 | * Some of the reports are due to sanity checks for proper nesting of comment | |
14 | * delimiters and parenthesis-like symbols, e.g., on unexpected/unclosed braces. | |
15 | */ | |
16 | ||
17 | /* | |
18 | * The '@'s after '*' are used for self-tests: they mark lines containing | |
19 | * a single flaw that should be reported. Normally it should be reported | |
20 | * while handling the given line, but in case of delayed checks there is a | |
21 | * following digit indicating the number of reports expected for this line. | |
22 | */ | |
23 | ||
24 | /* For each of the following set of lines the tool should complain once */ | |
25 | /*@ tab character: */ | |
26 | /*@ intra-line carriage return character: \r */ | |
27 | /*@ non-printable ASCII character: \b */ | |
28 | /*@ non-ASCII character: รค */ | |
29 | /*@ whitespace at EOL: */ | |
30 | // /*@ end-of-line comment style not allowed (for C90 compatibility) */ | |
31 | /*@0 intra-line comment indent off by 1, reported unless sloppy-cmt */ | |
0a8a9f8f DDO |
32 | /*X */ /*@2 missing spc or '*' after comment start reported unless sloppy-spc */ |
33 | /* X*/ /*@ missing space before comment end , reported unless sloppy-spc */ | |
99a16e04 DDO |
34 | /*@ comment starting delimiter: /* inside intra-line comment */ |
35 | /*@0 | |
36 | *@ above multi-line comment start indent off by 1, reported unless sloppy-cmt; this comment line is too long | |
37 | *@ multi-line comment indent further off by 1 relative to comment start | |
38 | *@ multi-line comment ending with text on last line */ | |
39 | /*@2 multi-line comment starting with text on first line | |
40 | *@ comment starting delimiter: /* inside multi-line comment | |
41 | *@ multi-line comment indent off by -1 | |
42 | *X*@ no spc after leading '*' in multi-line comment, reported unless sloppy-spc | |
521f07eb DDO |
43 | *@0 more than two spaces after . in comment, no more reported |
44 | *@0 more than two spaces after ? in comment, no more reported | |
45 | *@0 more than two spaces after ! in comment, no more reported | |
c9725776 | 46 | */ /*@ multi-line comment end indent off by -1 (relative to comment start) */ |
99a16e04 | 47 | */ /*@ unexpected comment ending delimiter outside comment */ |
521f07eb | 48 | /*- '-' for formatted comment not allowed in intra-line comment */ |
99a16e04 DDO |
49 | /*@ comment line is 4 columns tooooooooooooooooo wide, reported unless sloppy-len */ |
50 | /*@ comment line is 5 columns toooooooooooooooooooooooooooooooooooooooooooooo wide */ | |
521f07eb DDO |
51 | #if ~0 /*@ '#if' with constant condition */ |
52 | #endif /*@ indent of preproc. directive off by 1 (must be 0) */ | |
65490417 | 53 | #define X (1 + 1) /*@0 extra space in body, reported unless sloppy-spc */ |
521f07eb DDO |
54 | #define Y 1 /*@ extra space before body, reported unless sloppy-spc */ \ |
55 | #define Z /*@2 preprocessor directive within multi-line directive */ | |
435e659a | 56 | typedef struct { /*@0 extra space in code, reported unless sloppy-spc */ |
521f07eb | 57 | enum { /*@1 extra space in intra-line comment, no more reported */ |
eb9b5320 | 58 | w = 0 /*@ hanging expr indent off by 1, or 3 for lines after '{' */ |
99a16e04 DDO |
59 | && 1, /*@ hanging expr indent off by 3, or -1 for leading '&&' */ |
60 | x = 1, /*@ hanging expr indent off by -1 */ | |
61 | y,z /*@ no space after ',', reported unless sloppy-spc */ | |
62 | } e_member ; /*@ space before ';', reported unless sloppy-spc */ | |
63 | int v[1; /*@ unclosed bracket in type declaration */ | |
64 | union { /*@ statement/type declaration indent off by -1 */ | |
65 | struct{} s; /*@ no space before '{', reported unless sloppy-spc */ | |
66 | }u_member; /*@ no space after '}', reported unless sloppy-spc */ | |
67 | } s_type; /*@ statement/type declaration indent off by 4 */ | |
68 | int* somefunc(); /*@ no space before '*' in type decl, r unless sloppy-spc */ | |
69 | void main(int n) { /*@ opening brace at end of function definition header */ | |
0a8a9f8f DDO |
70 | for (; ; ) ; /*@ space before ')', reported unless sloppy-spc */ |
71 | for ( ; x; y) ; /*@2 space after '(' and before ';', unless sloppy-spc */ | |
72 | for (;;n++) { /*@ missing space after ';', reported unless sloppy-spc */ | |
99a16e04 DDO |
73 | return; /*@0 (1-line) single statement in braces */ |
74 | }} /*@2 code after '}' outside expr */ | |
75 | } /*@ unexpected closing brace (too many '}') outside expr */ | |
76 | ) /*@ unexpected closing paren outside expr */ | |
77 | #endif /*@ unexpected #endif */ | |
78 | int f (int a, /*@ space after fn before '(', reported unless sloppy-spc */ | |
79 | int b, /*@ hanging expr indent off by -1 */ | |
7d334927 | 80 | long I) /*@ single-letter name 'I' */ |
23757b61 DDO |
81 | { int x; /*@ code after '{' opening a block */ |
82 | int xx = 1) + /*@ unexpected closing parenthesis */ | |
ff381033 DDO |
83 | 0L < /*@ constant on LHS of comparison operator */ |
84 | a] - /*@ unexpected closing bracket */ | |
99a16e04 DDO |
85 | 3: * /*@ unexpected ':' (without preceding '?') within expr */ |
86 | 4}; /*@ unexpected closing brace within expression */ | |
87 | char y[] = { /*@0 unclosed brace within initializer/enum expression */ | |
88 | 1* 1, /*@ no space etc. before '*', reported unless sloppy-spc */ | |
89 | 2, /*@ hanging expr indent (for lines after '{') off by 1 */ | |
90 | (xx /*@0 unclosed parenthesis in expression */ | |
91 | ? y /*@0 unclosed '? (conditional expression) */ | |
92 | [0; /*@4 unclosed bracket in expression */ | |
d8662f2f DDO |
93 | /*@ blank line within local decls */ |
94 | s_type s; /*@2 local variable declaration indent off by -1 */ | |
95 | t_type t; /*@ local variable declaration indent again off by -1 */ | |
96 | /* */ /*@0 missing blank line after local decls */ | |
97 | somefunc(a, /*@2 statement indent off by -1 */ | |
99a16e04 DDO |
98 | "aligned" /*@ expr indent off by -2 accepted if sloppy-hang */ "right" |
99 | , b, /*@ expr indent off by -1 */ | |
100 | b, /*@ expr indent as on line above, accepted if sloppy-hang */ | |
101 | b, /*@ expr indent off -8 but @ extra indent accepted if sloppy-hang */ | |
102 | "again aligned" /*@ expr indent off by -9 (left of stmt indent, */ "right", | |
ff381033 | 103 | abc == /*@ .. so reported also with sloppy-hang; this line is too long */ 456 |
99a16e04 DDO |
104 | # define MAC(A) (A) /*@ nesting indent of preprocessor directive off by 1 */ |
105 | ? 1 /*@ hanging expr indent off by 1 */ | |
106 | : 2); /*@ hanging expr indent off by 2, or 1 for leading ':' */ | |
0a8a9f8f | 107 | if(a /*@ missing space after 'if', reported unless sloppy-spc */ |
99a16e04 DDO |
108 | /*@0 intra-line comment indent off by -1 (not: by 3 due to '&&') */ |
109 | && ! 0 /*@2 space after '!', reported unless sloppy-spc */ | |
110 | || b == /*@ hanging expr indent off by 2, or -2 for leading '||' */ | |
3e139f3d | 111 | (x<<= 1) + /*@ missing space before '<<=' reported unless sloppy-spc */ |
0a8a9f8f DDO |
112 | (xx+= 2) + /*@ missing space before '+=', reported unless sloppy-spc */ |
113 | (a^ 1) + /*@ missing space before '^', reported unless sloppy-spc */ | |
3e139f3d | 114 | (y *=z) + /*@ missing space after '*=' reported unless sloppy-spc */ |
0a8a9f8f | 115 | a %2 / /*@ missing space after '%', reported unless sloppy-spc */ |
99a16e04 DDO |
116 | 1 +/* */ /*@ no space before comment, reported unless sloppy-spc */ |
117 | /* */+ /*@ no space after comment, reported unless sloppy-spc */ | |
118 | s. e_member) /*@ space after '.', reported unless sloppy-spc */ | |
119 | xx = a + b /*@ extra single-statement indent off by 1 */ | |
120 | + 0; /*@ two times extra single-statement indent off by 3 */ | |
121 | if (a ++) /*@ space before postfix '++', reported unless sloppy-spc */ | |
122 | { /*@ {' not on same line as preceding 'if' */ | |
123 | c; /*@0 single stmt in braces, reported on 1-stmt */ | |
0a8a9f8f | 124 | } else /*@ missing '{' on same line after '} else' */ |
99a16e04 DDO |
125 | { /*@ statement indent off by 2 */ |
126 | d; /*@0 single stmt in braces, reported on 1-stmt */ | |
127 | } /*@ statement indent off by 6 */ | |
128 | if (1) f(a, /*@ (non-brace) code after end of 'if' condition */ | |
129 | b); else /*@ (non-brace) code before 'else' */ | |
130 | do f(c, c); /*@ (non-brace) code after 'do' */ | |
131 | while ( 2); /*@ space after '(', reported unless sloppy-spc */ | |
132 | b; c; /*@ more than one statement per line */ | |
13a574d8 | 133 | outer: /*@ outer label special indent off by 1 */ |
0a8a9f8f | 134 | do{ /*@ missing space before '{', reported unless sloppy-spc */ |
13a574d8 | 135 | inner: /*@ inner label normal indent off by 1 */ |
99a16e04 DDO |
136 | f (3, /*@ space after fn before '(', reported unless sloppy-spc */ |
137 | 4); /*@0 false negative: should report single stmt in braces */ | |
138 | } /*@0 'while' not on same line as preceding '}' */ | |
0a8a9f8f | 139 | while (a+ 0); /*@2 missing space before '+', reported unless sloppy-spc */ |
99a16e04 DDO |
140 | switch (b ) { /*@ space before ')', reported unless sloppy-spc */ |
141 | case 1: /*@ 'case' special statement indent off by -1 */ | |
0a8a9f8f | 142 | case(2): /*@ missing space after 'case', reported unless sloppy-spc */ |
99a16e04 DDO |
143 | default: ; /*@ code after 'default:' */ |
144 | } /*@ statement indent off by -4 */ | |
0a8a9f8f | 145 | return( /*@ missing space after 'return', reported unless sloppy-spc */ |
99a16e04 DDO |
146 | x); } /*@ code before block-level '}' */ |
147 | /* Here the tool should stop complaining apart from the below issues at EOF */ | |
148 | ||
149 | void f_looong_body() | |
150 | { | |
43b2e9e0 DDO |
151 | ; |
152 | ; | |
153 | ; | |
154 | ; | |
155 | ; | |
156 | ; | |
157 | ; | |
158 | ; | |
159 | ; | |
160 | ; | |
161 | ; | |
162 | ; | |
163 | ; | |
164 | ; | |
165 | ; | |
166 | ; | |
167 | ; | |
168 | ; | |
169 | ; | |
170 | ; | |
171 | ; | |
172 | ; | |
173 | ; | |
174 | ; | |
175 | ; | |
176 | ; | |
177 | ; | |
178 | ; | |
179 | ; | |
180 | ; | |
181 | ; | |
182 | ; | |
183 | ; | |
184 | ; | |
185 | ; | |
186 | ; | |
187 | ; | |
188 | ; | |
189 | ; | |
190 | ; | |
191 | ; | |
192 | ; | |
193 | ; | |
194 | ; | |
195 | ; | |
196 | ; | |
197 | ; | |
198 | ; | |
199 | ; | |
200 | ; | |
201 | ; | |
202 | ; | |
203 | ; | |
204 | ; | |
205 | ; | |
206 | ; | |
207 | ; | |
208 | ; | |
209 | ; | |
210 | ; | |
211 | ; | |
212 | ; | |
213 | ; | |
214 | ; | |
215 | ; | |
216 | ; | |
217 | ; | |
218 | ; | |
219 | ; | |
220 | ; | |
221 | ; | |
222 | ; | |
223 | ; | |
224 | ; | |
225 | ; | |
226 | ; | |
227 | ; | |
228 | ; | |
229 | ; | |
230 | ; | |
231 | ; | |
232 | ; | |
233 | ; | |
234 | ; | |
235 | ; | |
236 | ; | |
237 | ; | |
238 | ; | |
239 | ; | |
240 | ; | |
241 | ; | |
242 | ; | |
243 | ; | |
244 | ; | |
245 | ; | |
246 | ; | |
247 | ; | |
248 | ; | |
249 | ; | |
250 | ; | |
251 | ; | |
252 | ; | |
253 | ; | |
254 | ; | |
255 | ; | |
256 | ; | |
257 | ; | |
258 | ; | |
259 | ; | |
260 | ; | |
261 | ; | |
262 | ; | |
263 | ; | |
264 | ; | |
265 | ; | |
266 | ; | |
267 | ; | |
268 | ; | |
269 | ; | |
270 | ; | |
271 | ; | |
272 | ; | |
273 | ; | |
274 | ; | |
275 | ; | |
276 | ; | |
277 | ; | |
278 | ; | |
279 | ; | |
280 | ; | |
281 | ; | |
282 | ; | |
283 | ; | |
284 | ; | |
285 | ; | |
286 | ; | |
287 | ; | |
288 | ; | |
289 | ; | |
290 | ; | |
291 | ; | |
292 | ; | |
293 | ; | |
294 | ; | |
295 | ; | |
296 | ; | |
297 | ; | |
298 | ; | |
299 | ; | |
300 | ; | |
301 | ; | |
302 | ; | |
303 | ; | |
304 | ; | |
305 | ; | |
306 | ; | |
307 | ; | |
308 | ; | |
309 | ; | |
310 | ; | |
311 | ; | |
312 | ; | |
313 | ; | |
314 | ; | |
315 | ; | |
316 | ; | |
317 | ; | |
318 | ; | |
319 | ; | |
320 | ; | |
321 | ; | |
322 | ; | |
323 | ; | |
324 | ; | |
325 | ; | |
326 | ; | |
327 | ; | |
328 | ; | |
329 | ; | |
330 | ; | |
331 | ; | |
332 | ; | |
333 | ; | |
334 | ; | |
335 | ; | |
336 | ; | |
337 | ; | |
338 | ; | |
339 | ; | |
340 | ; | |
341 | ; | |
342 | ; | |
343 | ; | |
344 | ; | |
345 | ; | |
346 | ; | |
347 | ; | |
348 | ; | |
349 | ||
350 | ||
d8662f2f | 351 | ; /*@ 2 essentially blank lines before, if !sloppy-spc */ |
99a16e04 | 352 | } /*@ function body length > 200 lines */ |
521f07eb | 353 | #if X /*@0 unclosed #if */ |
99a16e04 DDO |
354 | struct t { /*@0 unclosed brace at decl/block level */ |
355 | enum { /*@0 unclosed brace at enum/expression level */ | |
356 | v = (1 /*@0 unclosed parenthesis */ | |
d8662f2f | 357 | etyp /*@0 blank line follows just before EOF, if !sloppy-spc: */ |
99a16e04 | 358 |