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