]>
Commit | Line | Data |
---|---|---|
99a16e04 | 1 | /* |
33388b44 | 2 | * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. |
99a16e04 DDO |
3 | * Copyright Nokia 2007-2019 |
4 | * Copyright Siemens AG 2015-2019 | |
5 | * | |
6 | * Licensed under the Apache License 2.0 (the "License"). You may not use | |
7 | * this file except in compliance with the License. You can obtain a copy | |
8 | * in the file LICENSE in the source distribution or at | |
9 | * https://www.openssl.org/source/license.html | |
10 | */ | |
11 | ||
12 | /* | |
13 | * This demonstrates/tests cases where check-format.pl should report issues. | |
14 | * Some of the reports are due to sanity checks for proper nesting of comment | |
15 | * delimiters and parenthesis-like symbols, e.g., on unexpected/unclosed braces. | |
16 | */ | |
17 | ||
18 | /* | |
19 | * The '@'s after '*' are used for self-tests: they mark lines containing | |
20 | * a single flaw that should be reported. Normally it should be reported | |
21 | * while handling the given line, but in case of delayed checks there is a | |
22 | * following digit indicating the number of reports expected for this line. | |
23 | */ | |
24 | ||
25 | /* For each of the following set of lines the tool should complain once */ | |
26 | /*@ tab character: */ | |
27 | /*@ intra-line carriage return character: \r */ | |
28 | /*@ non-printable ASCII character: \b */ | |
29 | /*@ non-ASCII character: รค */ | |
30 | /*@ whitespace at EOL: */ | |
31 | // /*@ end-of-line comment style not allowed (for C90 compatibility) */ | |
32 | /*@0 intra-line comment indent off by 1, reported unless sloppy-cmt */ | |
33 | /*X */ /*@2 no space nor '*' after comment start, reported unless sloppy-spc */ | |
34 | /* X*/ /*@ no space before comment end , reported unless sloppy-spc */ | |
35 | /*@ comment starting delimiter: /* inside intra-line comment */ | |
36 | /*@0 | |
37 | *@ above multi-line comment start indent off by 1, reported unless sloppy-cmt; this comment line is too long | |
38 | *@ multi-line comment indent further off by 1 relative to comment start | |
39 | *@ multi-line comment ending with text on last line */ | |
40 | /*@2 multi-line comment starting with text on first line | |
41 | *@ comment starting delimiter: /* inside multi-line comment | |
42 | *@ multi-line comment indent off by -1 | |
43 | *X*@ no spc after leading '*' in multi-line comment, reported unless sloppy-spc | |
44 | *@0 more than two spaces after . in comment, reported unless sloppy-spc | |
45 | */ /*@2 multi-line comment end indent off by -1 (relative to comment start) */ | |
46 | */ /*@ unexpected comment ending delimiter outside comment */ | |
47 | /*@ comment line is 4 columns tooooooooooooooooo wide, reported unless sloppy-len */ | |
48 | /*@ comment line is 5 columns toooooooooooooooooooooooooooooooooooooooooooooo wide */ | |
49 | #define X 1 /*@0 double space false negative due to coincidence */ | |
50 | #define Y 2 /*@ indent of preprocessor directive off by 1 (must be 0) */ | |
51 | typedef struct { /*@0 double space in code, reported unless sloppy-spc */ | |
52 | enum { /*@1 double space in comment, reported unless sloppy-spc */ | |
53 | w = 0 /*@2 hanging expr indent off by 1, or 3 for lines after '{' */ | |
54 | && 1, /*@ hanging expr indent off by 3, or -1 for leading '&&' */ | |
55 | x = 1, /*@ hanging expr indent off by -1 */ | |
56 | y,z /*@ no space after ',', reported unless sloppy-spc */ | |
57 | } e_member ; /*@ space before ';', reported unless sloppy-spc */ | |
58 | int v[1; /*@ unclosed bracket in type declaration */ | |
59 | union { /*@ statement/type declaration indent off by -1 */ | |
60 | struct{} s; /*@ no space before '{', reported unless sloppy-spc */ | |
61 | }u_member; /*@ no space after '}', reported unless sloppy-spc */ | |
62 | } s_type; /*@ statement/type declaration indent off by 4 */ | |
63 | int* somefunc(); /*@ no space before '*' in type decl, r unless sloppy-spc */ | |
64 | void main(int n) { /*@ opening brace at end of function definition header */ | |
65 | for (;;n++) { /*@ no space after ';', reported unless sloppy-spc */ | |
66 | return; /*@0 (1-line) single statement in braces */ | |
67 | }} /*@2 code after '}' outside expr */ | |
68 | } /*@ unexpected closing brace (too many '}') outside expr */ | |
69 | ) /*@ unexpected closing paren outside expr */ | |
70 | #endif /*@ unexpected #endif */ | |
71 | int f (int a, /*@ space after fn before '(', reported unless sloppy-spc */ | |
72 | int b, /*@ hanging expr indent off by -1 */ | |
73 | long l) /*@ one-letter name 'l' */ | |
74 | { int /*@ code after '{' opening a block */ | |
75 | xx = 1) + /*@ unexpected closing parenthesis */ | |
76 | 2] - /*@ unexpected closing bracket */ | |
77 | 3: * /*@ unexpected ':' (without preceding '?') within expr */ | |
78 | 4}; /*@ unexpected closing brace within expression */ | |
79 | char y[] = { /*@0 unclosed brace within initializer/enum expression */ | |
80 | 1* 1, /*@ no space etc. before '*', reported unless sloppy-spc */ | |
81 | 2, /*@ hanging expr indent (for lines after '{') off by 1 */ | |
82 | (xx /*@0 unclosed parenthesis in expression */ | |
83 | ? y /*@0 unclosed '? (conditional expression) */ | |
84 | [0; /*@4 unclosed bracket in expression */ | |
85 | s_type s; /*@ local variable declaration indent off by -1 */ | |
86 | somefunc(a, /*@ statement indent off by -1 */ | |
87 | "aligned" /*@ expr indent off by -2 accepted if sloppy-hang */ "right" | |
88 | , b, /*@ expr indent off by -1 */ | |
89 | b, /*@ expr indent as on line above, accepted if sloppy-hang */ | |
90 | b, /*@ expr indent off -8 but @ extra indent accepted if sloppy-hang */ | |
91 | "again aligned" /*@ expr indent off by -9 (left of stmt indent, */ "right", | |
92 | 123 == /*@ .. so reported also with sloppy-hang; this line is too long */ 456 | |
93 | # define MAC(A) (A) /*@ nesting indent of preprocessor directive off by 1 */ | |
94 | ? 1 /*@ hanging expr indent off by 1 */ | |
95 | : 2); /*@ hanging expr indent off by 2, or 1 for leading ':' */ | |
96 | if(a /*@ no space after 'if', reported unless sloppy-spc */ | |
97 | /*@0 intra-line comment indent off by -1 (not: by 3 due to '&&') */ | |
98 | && ! 0 /*@2 space after '!', reported unless sloppy-spc */ | |
99 | || b == /*@ hanging expr indent off by 2, or -2 for leading '||' */ | |
100 | (xx+= 2) + /*@ no space before '+=', reported unless sloppy-spc */ | |
101 | (a^ 1) + /*@ no space before '^', reported unless sloppy-spc */ | |
102 | a %2 / /*@ no space after '%', reported unless sloppy-spc */ | |
103 | 1 +/* */ /*@ no space before comment, reported unless sloppy-spc */ | |
104 | /* */+ /*@ no space after comment, reported unless sloppy-spc */ | |
105 | s. e_member) /*@ space after '.', reported unless sloppy-spc */ | |
106 | xx = a + b /*@ extra single-statement indent off by 1 */ | |
107 | + 0; /*@ two times extra single-statement indent off by 3 */ | |
108 | if (a ++) /*@ space before postfix '++', reported unless sloppy-spc */ | |
109 | { /*@ {' not on same line as preceding 'if' */ | |
110 | c; /*@0 single stmt in braces, reported on 1-stmt */ | |
111 | } else /*@ no '{' on same line after '} else' */ | |
112 | { /*@ statement indent off by 2 */ | |
113 | d; /*@0 single stmt in braces, reported on 1-stmt */ | |
114 | } /*@ statement indent off by 6 */ | |
115 | if (1) f(a, /*@ (non-brace) code after end of 'if' condition */ | |
116 | b); else /*@ (non-brace) code before 'else' */ | |
117 | do f(c, c); /*@ (non-brace) code after 'do' */ | |
118 | while ( 2); /*@ space after '(', reported unless sloppy-spc */ | |
119 | b; c; /*@ more than one statement per line */ | |
120 | do{ /*@ no space before '{', reported unless sloppy-spc */ | |
121 | f (3, /*@ space after fn before '(', reported unless sloppy-spc */ | |
122 | 4); /*@0 false negative: should report single stmt in braces */ | |
123 | } /*@0 'while' not on same line as preceding '}' */ | |
124 | while (a+ 0); /*@2 no space before '+', reported unless sloppy-spc */ | |
125 | switch (b ) { /*@ space before ')', reported unless sloppy-spc */ | |
126 | case 1: /*@ 'case' special statement indent off by -1 */ | |
127 | case(2): /*@ no space after 'case', reported unless sloppy-spc */ | |
128 | default: ; /*@ code after 'default:' */ | |
129 | } /*@ statement indent off by -4 */ | |
130 | label: /*@ label special statement indent off by 1 */ | |
131 | return( /*@ no space after 'return', reported unless sloppy-spc */ | |
132 | x); } /*@ code before block-level '}' */ | |
133 | /* Here the tool should stop complaining apart from the below issues at EOF */ | |
134 | ||
135 | void f_looong_body() | |
136 | { | |
43b2e9e0 DDO |
137 | ; |
138 | ; | |
139 | ; | |
140 | ; | |
141 | ; | |
142 | ; | |
143 | ; | |
144 | ; | |
145 | ; | |
146 | ; | |
147 | ; | |
148 | ; | |
149 | ; | |
150 | ; | |
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 | ||
174f4a4d | 337 | ; /*@ 2 essentially empty lines before, if !sloppy-spc */ |
99a16e04 | 338 | } /*@ function body length > 200 lines */ |
99a16e04 DDO |
339 | #if 0 /*@0 unclosed #if */ |
340 | struct t { /*@0 unclosed brace at decl/block level */ | |
341 | enum { /*@0 unclosed brace at enum/expression level */ | |
342 | v = (1 /*@0 unclosed parenthesis */ | |
174f4a4d | 343 | etyp /*@0 empty line follows just before EOF, if !sloppy-spc: */ |
99a16e04 | 344 |