decl.c revision 1.1 1 1.1 rillig /* $NetBSD: decl.c,v 1.1 2021/07/10 18:25:57 rillig Exp $ */
2 1.1 rillig # 3 "decl.c"
3 1.1 rillig
4 1.1 rillig /*
5 1.1 rillig * Tests for declarations, especially the distinction between the
6 1.1 rillig * declaration-specifiers and the declarators.
7 1.1 rillig */
8 1.1 rillig
9 1.1 rillig /*
10 1.1 rillig * Even though 'const' comes after 'char' and is therefore quite close to the
11 1.1 rillig * first identifier, it applies to both identifiers.
12 1.1 rillig */
13 1.1 rillig void
14 1.1 rillig specifier_qualifier(void)
15 1.1 rillig {
16 1.1 rillig char const a = 1, b = 2;
17 1.1 rillig
18 1.1 rillig /* expect+1: warning: left operand of '=' must be modifiable lvalue [115] */
19 1.1 rillig a = 1;
20 1.1 rillig /* expect+1: warning: left operand of '=' must be modifiable lvalue [115] */
21 1.1 rillig b = 2;
22 1.1 rillig }
23 1.1 rillig
24 1.1 rillig /*
25 1.1 rillig * Since 'const' comes before 'char', there is no ambiguity whether the
26 1.1 rillig * 'const' applies to all variables or just to the first.
27 1.1 rillig */
28 1.1 rillig void
29 1.1 rillig qualifier_specifier(void)
30 1.1 rillig {
31 1.1 rillig const char a = 1, b = 2;
32 1.1 rillig
33 1.1 rillig /* expect+1: warning: left operand of '=' must be modifiable lvalue [115] */
34 1.1 rillig a = 3;
35 1.1 rillig /* expect+1: warning: left operand of '=' must be modifiable lvalue [115] */
36 1.1 rillig b = 5;
37 1.1 rillig }
38 1.1 rillig
39 1.1 rillig void
40 1.1 rillig declarator_with_prefix_qualifier(void)
41 1.1 rillig {
42 1.1 rillig /* expect+1: syntax error 'const' [249] */
43 1.1 rillig char a = 1, const b = 2;
44 1.1 rillig
45 1.1 rillig a = 1;
46 1.1 rillig /* expect+1: error: 'b' undefined [99] */
47 1.1 rillig b = 2;
48 1.1 rillig }
49 1.1 rillig
50 1.1 rillig void
51 1.1 rillig declarator_with_postfix_qualifier(void)
52 1.1 rillig {
53 1.1 rillig /* expect+1: syntax error 'const' [249] */
54 1.1 rillig char a = 1, b const = 2;
55 1.1 rillig
56 1.1 rillig a = 1;
57 1.1 rillig b = 2;
58 1.1 rillig }
59 1.1 rillig
60 1.1 rillig void sink(double *);
61 1.1 rillig
62 1.1 rillig void
63 1.1 rillig declarators(void)
64 1.1 rillig {
65 1.1 rillig char *pc = 0, c = 0, **ppc = 0;
66 1.1 rillig
67 1.1 rillig /* expect+1: warning: converting 'pointer to char' to incompatible 'pointer to double' */
68 1.1 rillig sink(pc);
69 1.1 rillig /* expect+1: warning: illegal combination of pointer (pointer to double) and integer (char) */
70 1.1 rillig sink(c);
71 1.1 rillig /* expect+1: converting 'pointer to pointer to char' to incompatible 'pointer to double' */
72 1.1 rillig sink(ppc);
73 1.1 rillig }
74