1 /* $NetBSD: psym_decl.c,v 1.5 2023/06/14 09:31:05 rillig Exp $ */ 2 3 /* 4 * Tests for the parser symbol psym_decl, which represents a declaration. 5 * 6 * Since C99, declarations and statements can be mixed in blocks. 7 * 8 * In C, a label can be followed by a statement but not by a declaration. 9 * 10 * Indent distinguishes global and local declarations. 11 * 12 * Declarations can be for functions or for variables. 13 */ 14 15 //indent input 16 int global_var; 17 int global_array = [1,2,3,4]; 18 int global_array = [ 19 1 20 ,2, 21 3, 22 4, 23 ]; 24 //indent end 25 26 //indent run -di0 27 int global_var; 28 int global_array = [1, 2, 3, 4]; 29 int global_array = [ 30 1 31 ,2, 32 3, 33 4, 34 ]; 35 //indent end 36 37 38 // Declarations can be nested. 39 //indent input 40 struct level_1 { 41 union level_2 { 42 enum level_3 { 43 level_3_c_1, 44 level_3_c_2, 45 } level_3; 46 } level_2; 47 } level_1; 48 //indent end 49 50 // The outermost declarator 'level_1' is indented as a global variable. 51 // The inner declarators 'level_2' and 'level_3' are indented as local 52 // variables. 53 // XXX: This is inconsistent, as in practice, struct members are usually 54 // aligned, while local variables aren't. 55 //indent run-equals-input -ldi0 56