xref: /netbsd-src/tests/usr.bin/xlint/lint1/decl_struct_c90.c (revision 0a781eec835ae32b619120ece6ab24853db6b188)
1*0a781eecSrillig /*	$NetBSD: decl_struct_c90.c,v 1.4 2022/02/27 11:40:30 rillig Exp $	*/
2ebf03b17Srillig # 3 "decl_struct_c90.c"
3ebf03b17Srillig 
4ebf03b17Srillig /*
5ebf03b17Srillig  * Test declaration of struct types, in C90 without any GNU extensions.
6ebf03b17Srillig  */
7ebf03b17Srillig 
8ebf03b17Srillig /* lint1-flags: -sw */
9ebf03b17Srillig 
10ae95f90eSrillig struct unnamed_member {
11ae95f90eSrillig 	enum { A, B, C } tag;
12ae95f90eSrillig 	union {
13ae95f90eSrillig 		int a_value;
14ae95f90eSrillig 		void *b_value;
15ae95f90eSrillig 		void (*c_value)(void);
16ae95f90eSrillig 	};
17*0a781eecSrillig 	/* expect-1: warning: anonymous struct/union members is a C11 feature [49] */
18ae95f90eSrillig };
19ae95f90eSrillig 
20ebf03b17Srillig /*
21ebf03b17Srillig  * All of K&R, C90, C99 require that a struct member declaration is
22a8f0cd4bSrillig  * terminated with a semicolon.
23a8f0cd4bSrillig  *
24a8f0cd4bSrillig  * Before cgram.y 1.328 from 2021-07-15, lint allowed the missing semicolon
25a8f0cd4bSrillig  * in non-C90 mode, no idea why.
26ebf03b17Srillig  */
27ebf03b17Srillig struct missing_semicolon {
28ebf03b17Srillig 	int member
29ebf03b17Srillig };
30a8f0cd4bSrillig /* expect-1: error: syntax error '}' [249] */
31a8f0cd4bSrillig /* expect+1: error: cannot recover from previous errors [224] */
32