decl_arg.c revision 1.4 1 1.4 rillig /* $NetBSD: decl_arg.c,v 1.4 2021/07/10 08:40:36 rillig Exp $ */
2 1.1 rillig # 3 "decl_arg.c"
3 1.1 rillig
4 1.1 rillig /*
5 1.1 rillig * Tests for declarations of function arguments.
6 1.1 rillig *
7 1.1 rillig * See arg_declaration in cgram.y.
8 1.1 rillig */
9 1.1 rillig
10 1.1 rillig typedef double number;
11 1.1 rillig
12 1.1 rillig void no_args(void);
13 1.1 rillig void type_unnamed(double );
14 1.1 rillig void type_named(double arg);
15 1.1 rillig void typedef_unnamed_prototype(number);
16 1.1 rillig void typedef_named(number arg);
17 1.1 rillig
18 1.1 rillig void type_qualifier(const number);
19 1.1 rillig void type_qualifier_pointer(const number *const);
20 1.1 rillig
21 1.1 rillig /*
22 1.1 rillig * Just some unrealistic coverage for the grammar rule 'arg_declaration'.
23 1.1 rillig */
24 1.1 rillig /* expect+6: warning: argument 'an_int' unused in function 'old_style' [231] */
25 1.1 rillig /* expect+5: warning: argument 'a_const_int' unused in function 'old_style' [231] */
26 1.1 rillig /* expect+4: warning: argument 'a_number' unused in function 'old_style' [231] */
27 1.1 rillig /* expect+3: warning: argument 'a_function' unused in function 'old_style' [231] */
28 1.1 rillig /* expect+2: warning: argument 'a_struct' unused in function 'old_style' [231] */
29 1.1 rillig extern void
30 1.1 rillig old_style(an_int, a_const_int, a_number, a_function, a_struct)
31 1.1 rillig /* expect+2: warning: empty declaration [2] */
32 1.1 rillig /* expect+1: error: only register valid as formal parameter storage class [9] */
33 1.1 rillig static;
34 1.1 rillig /* expect+1: error: syntax error '"' [249] */
35 1.1 rillig static "error";
36 1.1 rillig /* expect+1: warning: empty declaration [2] */
37 1.1 rillig const;
38 1.1 rillig /* expect+1: error: declared argument undeclared is missing [53] */
39 1.1 rillig const undeclared;
40 1.1 rillig /* expect+2: error: declared argument undeclared_initialized is missing [53] */
41 1.1 rillig /* expect+1: error: cannot initialize parameter: undeclared_initialized [52] */
42 1.1 rillig const undeclared_initialized = 12345;
43 1.1 rillig /* expect+1: warning: empty declaration [2] */
44 1.1 rillig int;
45 1.1 rillig /* expect+1: warning: 'struct arg_struct' declared in argument declaration list [3] */
46 1.1 rillig struct arg_struct { int member; };
47 1.1 rillig /* expect+1: error: cannot initialize parameter: an_int [52] */
48 1.1 rillig int an_int = 12345;
49 1.1 rillig const int a_const_int;
50 1.1 rillig number a_number;
51 1.1 rillig void (a_function) (number);
52 1.1 rillig /* expect+1: warning: 'struct a_struct' declared in argument declaration list [3] */
53 1.1 rillig struct a_struct { int member; } a_struct;
54 1.1 rillig {
55 1.1 rillig }
56 1.1 rillig
57 1.1 rillig /*
58 1.1 rillig * Just some unrealistic coverage for the grammar rule 'notype_direct_decl'.
59 1.1 rillig */
60 1.1 rillig extern int
61 1.1 rillig cover_notype_direct_decl(arg)
62 1.1 rillig int arg;
63 1.1 rillig /* expect+1: error: declared argument name is missing [53] */
64 1.1 rillig const name;
65 1.1 rillig /* expect+1: error: declared argument parenthesized_name is missing [53] */
66 1.1 rillig const (parenthesized_name);
67 1.1 rillig /* expect+1: error: declared argument array is missing [53] */
68 1.1 rillig const array[];
69 1.1 rillig /* expect+1: error: declared argument array_size is missing [53] */
70 1.1 rillig const array_size[1+1+1];
71 1.1 rillig /* expect+2: error: declared argument multi_array is missing [53] */
72 1.1 rillig /* expect+1: error: null dimension [17] */
73 1.1 rillig const multi_array[][][][][][];
74 1.1 rillig /* expect+1: error: declared argument function is missing [53] */
75 1.1 rillig const function(void);
76 1.1 rillig /* expect+1: error: declared argument prefix_attribute is missing [53] */
77 1.1 rillig const __attribute__((deprecated)) prefix_attribute;
78 1.1 rillig /* expect+1: error: declared argument postfix_attribute is missing [53] */
79 1.1 rillig const postfix_attribute __attribute__((deprecated));
80 1.1 rillig /* expect+1: error: declared argument infix_attribute is missing [53] */
81 1.1 rillig const __attribute__((deprecated)) infix_attribute __attribute__((deprecated));
82 1.1 rillig /* The __attribute__ before the '*' is consumed by some other grammar rule. */
83 1.1 rillig /* expect+7: error: declared argument pointer_prefix_attribute is missing [53] */
84 1.1 rillig const
85 1.1 rillig __attribute__((deprecated))
86 1.1 rillig *
87 1.1 rillig __attribute__((deprecated))
88 1.1 rillig __attribute__((deprecated))
89 1.1 rillig __attribute__((deprecated))
90 1.1 rillig pointer_prefix_attribute;
91 1.1 rillig {
92 1.1 rillig return arg;
93 1.1 rillig }
94 1.2 rillig
95 1.2 rillig void test_varargs_attribute(
96 1.2 rillig void (*pr)(const char *, ...)
97 1.2 rillig __attribute__((__format__(__printf__, 1, 2)))
98 1.2 rillig );
99 1.3 rillig
100 1.3 rillig /*
101 1.3 rillig * XXX: To cover the grammar rule 'direct_notype_param_decl', the parameters
102 1.3 rillig * need to be enclosed by one more pair of parentheses than usual.
103 1.3 rillig */
104 1.3 rillig void cover_direct_notype_param_decl(
105 1.4 rillig double (identifier),
106 1.3 rillig double ((parenthesized)),
107 1.3 rillig double (array[]),
108 1.3 rillig double (array_size[3]),
109 1.3 rillig double (*)(void (function()))
110 1.3 rillig );
111 1.4 rillig
112 1.4 rillig /*
113 1.4 rillig * Just some unrealistic code to cover the grammar rule parameter_declaration.
114 1.4 rillig */
115 1.4 rillig /* expect+4: error: only register valid as formal parameter storage class [9] */
116 1.4 rillig void cover_parameter_declaration(
117 1.4 rillig volatile, /* 1 */
118 1.4 rillig double, /* 2 */
119 1.4 rillig static storage_class, /* 3.1 */
120 1.4 rillig const type_qualifier, /* 3.2 */
121 1.4 rillig double (identifier), /* 4 */
122 1.4 rillig const (*), /* 5 */
123 1.4 rillig double *const, /* 6 */
124 1.4 rillig ...
125 1.4 rillig );
126