xref: /netbsd-src/tests/usr.bin/xlint/lint1/decl_struct_member.c (revision 3d6a50253cd682dca85a66a49baee893251dac65)
1*3d6a5025Srillig /*	$NetBSD: decl_struct_member.c,v 1.19 2025/01/03 03:14:47 rillig Exp $	*/
288734965Srillig # 3 "decl_struct_member.c"
388734965Srillig 
4b2baa501Srillig /* lint1-extra-flags: -X 351 */
5b2baa501Srillig 
6657be11cSrillig struct multi_attributes {
7657be11cSrillig 	__attribute__((deprecated))
8657be11cSrillig 	__attribute__((deprecated))
9657be11cSrillig 	__attribute__((deprecated))
10657be11cSrillig 	int deprecated;
11657be11cSrillig };
12657be11cSrillig 
134d9776f9Srillig struct cover_begin_type_specifier_qualifier_list {
14a4bbb227Srillig 	int m1;
15a4bbb227Srillig 	__attribute__((deprecated)) int m2;
16a4bbb227Srillig 	const int m3;
17a4bbb227Srillig 	int const m4;
18a4bbb227Srillig 	int const long m5;
19a4bbb227Srillig 	int __attribute__((deprecated)) m6;
20a4bbb227Srillig };
21a4bbb227Srillig 
22a4bbb227Srillig typedef int number;
23a4bbb227Srillig 
24a4bbb227Srillig struct cover_begin_type_typespec {
25a4bbb227Srillig 	int m1;
26a4bbb227Srillig 	number m2;
27a4bbb227Srillig };
28a4bbb227Srillig 
294d9776f9Srillig struct cover_begin_type_qualifier_list {
30a4bbb227Srillig 	const m1;
31a4bbb227Srillig 	const volatile m2;
32a4bbb227Srillig };
33a4bbb227Srillig 
34ebf03b17Srillig /* cover struct_or_union_specifier: struct_or_union error */
35ebf03b17Srillig /* expect+1: error: syntax error 'goto' [249] */
36ebf03b17Srillig struct goto {
37ebf03b17Srillig 	/* expect+1: error: illegal type combination [4] */
38ebf03b17Srillig 	int member;
39ebf03b17Srillig 	/* expect+1: error: syntax error '}' [249] */
40ebf03b17Srillig };
41ebf03b17Srillig /* expect-1: warning: empty declaration [0] */
42ebf03b17Srillig 
4388734965Srillig /*
4488734965Srillig  * Before cgram.y 1.228 from 2021-06-19, lint ran into an assertion failure:
4588734965Srillig  *
4688734965Srillig  * "is_struct_or_union(dcs->d_type->t_tspec)" at cgram.y:846
4788734965Srillig  */
4888734965Srillig struct {
49a4a927acSrillig 	/* expect+1: error: syntax error 'unnamed member' [249] */
50a4a927acSrillig 	char;
5188734965Srillig };
52c6433d2cSrillig 
53ae95f90eSrillig struct cover_notype_struct_declarators {
54ae95f90eSrillig 	const a, b;
55ae95f90eSrillig };
56ae95f90eSrillig 
57ae95f90eSrillig struct cover_notype_struct_declarator_bit_field {
58ae95f90eSrillig 	const a:3, :0, b:4;
59ae95f90eSrillig 	const:0;
60ae95f90eSrillig };
61ae95f90eSrillig 
62c6433d2cSrillig /*
6392de156fSrillig  * An array of bit-fields sounds like a strange idea since a bit-field member
6492de156fSrillig  * is not addressable, while an array needs to be addressable.  Due to this
6592de156fSrillig  * contradiction, this combination may have gone without mention in the C
6692de156fSrillig  * standards.
6792de156fSrillig  *
6892de156fSrillig  * GCC 10.3.0 complains that the bit-field has invalid type.
6992de156fSrillig  *
7092de156fSrillig  * Clang 12.0.1 complains that the bit-field has non-integral type 'unsigned
7192de156fSrillig  * int [8]'.
7292de156fSrillig  */
7392de156fSrillig struct array_of_bit_fields {
7492de156fSrillig 	/* expect+1: warning: illegal bit-field type 'array[8] of unsigned int' [35] */
7592de156fSrillig 	unsigned int bits[8]: 1;
7692de156fSrillig };
7792de156fSrillig 
7892de156fSrillig /*
79c6433d2cSrillig  * Before decl.c 1.188 from 2021-06-20, lint ran into a segmentation fault.
80c6433d2cSrillig  */
81c6433d2cSrillig struct {
82a4a927acSrillig 	/* expect+1: error: syntax error '0' [249] */
83a4a927acSrillig 	char a(_)0
8407f85658Srillig 
85c6433d2cSrillig /*
8607f85658Srillig  * Before cgram.y 1.328 from 2021-07-15, lint ran into an assertion failure
8707f85658Srillig  * at the closing semicolon:
88c6433d2cSrillig  *
89f14ab694Srillig  * assertion "t == NO_TSPEC" failed in end_type at decl.c:774
90c6433d2cSrillig  */
9107f85658Srillig };
92c83f7defSrillig /* expect+1: error: cannot recover from previous errors [224] */
93