xref: /netbsd-src/tests/usr.bin/xlint/lint1/decl_struct_member.c (revision 7d62b00eb9ad855ffcd7da46b41e23feb5476fac)
1 /*	$NetBSD: decl_struct_member.c,v 1.15 2022/06/17 18:54:53 rillig Exp $	*/
2 # 3 "decl_struct_member.c"
3 
4 struct multi_attributes {
5 	__attribute__((deprecated))
6 	__attribute__((deprecated))
7 	__attribute__((deprecated))
8 	int deprecated;
9 };
10 
11 struct cover_begin_type_specifier_qualifier_list {
12 	int m1;
13 	__attribute__((deprecated)) int m2;
14 	const int m3;
15 	int const m4;
16 	int const long m5;
17 	int __attribute__((deprecated)) m6;
18 };
19 
20 typedef int number;
21 
22 struct cover_begin_type_typespec {
23 	int m1;
24 	number m2;
25 };
26 
27 struct cover_begin_type_qualifier_list {
28 	const m1;
29 	const volatile m2;
30 };
31 
32 /* cover struct_or_union_specifier: struct_or_union error */
33 /* expect+1: error: syntax error 'goto' [249] */
34 struct goto {
35 	/* expect+1: error: illegal type combination [4] */
36 	int member;
37 	/* expect+1: error: syntax error '}' [249] */
38 };
39 /* expect-1: warning: empty declaration [0] */
40 
41 /*
42  * Before cgram.y 1.228 from 2021-06-19, lint ran into an assertion failure:
43  *
44  * "is_struct_or_union(dcs->d_type->t_tspec)" at cgram.y:846
45  */
46 struct {
47 	/* expect+1: error: syntax error 'unnamed member' [249] */
48 	char;
49 };
50 
51 struct cover_notype_struct_declarators {
52 	const a, b;
53 };
54 
55 struct cover_notype_struct_declarator_bit_field {
56 	const a:3, :0, b:4;
57 	const:0;
58 };
59 
60 /*
61  * An array of bit-fields sounds like a strange idea since a bit-field member
62  * is not addressable, while an array needs to be addressable.  Due to this
63  * contradiction, this combination may have gone without mention in the C
64  * standards.
65  *
66  * GCC 10.3.0 complains that the bit-field has invalid type.
67  *
68  * Clang 12.0.1 complains that the bit-field has non-integral type 'unsigned
69  * int [8]'.
70  */
71 struct array_of_bit_fields {
72 	/* expect+1: warning: illegal bit-field type 'array[8] of unsigned int' [35] */
73 	unsigned int bits[8]: 1;
74 };
75 
76 /*
77  * Before decl.c 1.188 from 2021-06-20, lint ran into a segmentation fault.
78  */
79 struct {
80 	/* expect+1: error: syntax error '0' [249] */
81 	char a(_)0
82 
83 /*
84  * Before cgram.y 1.328 from 2021-07-15, lint ran into an assertion failure
85  * at the closing semicolon:
86  *
87  * assertion "t == NOTSPEC" failed in end_type at decl.c:774
88  */
89 };
90 /* expect+1: error: cannot recover from previous errors [224] */
91