msg_280.c revision 1.9 1 1.9 rillig /* $NetBSD: msg_280.c,v 1.9 2023/08/02 18:51:25 rillig Exp $ */
2 1.1 rillig # 3 "msg_280.c"
3 1.1 rillig
4 1.6 rillig // Test for message: comment /* %s */ must be outside function [280]
5 1.1 rillig
6 1.7 rillig /* lint1-extra-flags: -X 351 */
7 1.7 rillig
8 1.3 rillig /* VARARGS */
9 1.3 rillig void
10 1.3 rillig varargs_ok(const char *str, ...)
11 1.3 rillig {
12 1.3 rillig (void)str;
13 1.3 rillig }
14 1.3 rillig
15 1.5 rillig /*
16 1.5 rillig * In the following example, the comment looks misplaced, but lint does not
17 1.5 rillig * warn about it.
18 1.5 rillig *
19 1.5 rillig * This is due to the implementation of the parser and the C grammar. When
20 1.5 rillig * the parser sees the token T_LPAREN, it has to decide whether the following
21 1.5 rillig * tokens will form a parameter type list or an identifier list. For that,
22 1.5 rillig * it needs to look at the next token to see whether it is a T_NAME (in which
23 1.5 rillig * case the T_LPAREN belongs to an id_list_lparen) or something else (in
24 1.5 rillig * which case the T_LPAREN belongs to an abstract_decl_lparen). This token
25 1.5 rillig * lookahead happens just before either of these grammar rules is reduced.
26 1.5 rillig * During that reduction, the current declaration context switches from
27 1.9 rillig * DLK_EXTERN to DLK_PROTO_PARAMS, which makes this exact position the very
28 1.5 rillig * last possible. Everything later would already be in the wrong context.
29 1.5 rillig *
30 1.5 rillig * As of cgram.y 1.360 from 2021-09-04, the implementation of these grammar
31 1.5 rillig * rules is exactly the same, which makes it tempting to join them into a
32 1.5 rillig * single rule.
33 1.5 rillig */
34 1.3 rillig void
35 1.3 rillig varargs_bad_param(/* VARARGS */ const char *str, ...)
36 1.3 rillig {
37 1.3 rillig (void)str;
38 1.3 rillig }
39 1.3 rillig
40 1.3 rillig void
41 1.6 rillig /* expect+1: warning: comment ** VARARGS ** must be outside function [280] */
42 1.3 rillig varargs_bad_ellipsis(const char *str, /* VARARGS */ ...)
43 1.3 rillig {
44 1.3 rillig (void)str;
45 1.3 rillig }
46 1.3 rillig
47 1.3 rillig void
48 1.3 rillig varargs_bad_body(const char *str, ...)
49 1.3 rillig {
50 1.6 rillig /* expect+1: warning: comment ** VARARGS ** must be outside function [280] */
51 1.3 rillig /* VARARGS */
52 1.3 rillig (void)str;
53 1.3 rillig }
54 1.3 rillig
55 1.3 rillig void
56 1.8 rillig /* expect+1: warning: parameter 'str' unused in function 'argsused_bad_body' [231] */
57 1.3 rillig argsused_bad_body(const char *str)
58 1.3 rillig {
59 1.6 rillig /* expect+1: warning: comment ** ARGSUSED ** must be outside function [280] */
60 1.3 rillig /* ARGSUSED */
61 1.3 rillig }
62 1.3 rillig
63 1.3 rillig void
64 1.3 rillig printflike_bad_body(const char *fmt, ...)
65 1.3 rillig {
66 1.6 rillig /* expect+1: warning: comment ** PRINTFLIKE ** must be outside function [280] */
67 1.3 rillig /* PRINTFLIKE */
68 1.3 rillig (void)fmt;
69 1.3 rillig }
70 1.3 rillig
71 1.3 rillig void
72 1.3 rillig scanflike_bad_body(const char *fmt, ...)
73 1.3 rillig {
74 1.6 rillig /* expect+1: warning: comment ** SCANFLIKE ** must be outside function [280] */
75 1.3 rillig /* SCANFLIKE */
76 1.3 rillig (void)fmt;
77 1.3 rillig }
78