11.5Srillig/* $NetBSD: psym_decl.c,v 1.5 2023/06/14 09:31:05 rillig Exp $ */ 21.1Srillig 31.1Srillig/* 41.1Srillig * Tests for the parser symbol psym_decl, which represents a declaration. 51.1Srillig * 61.1Srillig * Since C99, declarations and statements can be mixed in blocks. 71.1Srillig * 81.5Srillig * In C, a label can be followed by a statement but not by a declaration. 91.4Srillig * 101.4Srillig * Indent distinguishes global and local declarations. 111.4Srillig * 121.4Srillig * Declarations can be for functions or for variables. 131.1Srillig */ 141.1Srillig 151.3Srillig//indent input 161.4Srilligint global_var; 171.4Srilligint global_array = [1,2,3,4]; 181.4Srilligint global_array = [ 191.4Srillig1 201.4Srillig,2, 211.4Srillig3, 221.4Srillig4, 231.4Srillig]; 241.3Srillig//indent end 251.1Srillig 261.4Srillig//indent run -di0 271.4Srilligint global_var; 281.4Srilligint global_array = [1, 2, 3, 4]; 291.4Srilligint global_array = [ 301.4Srillig 1 311.4Srillig ,2, 321.4Srillig 3, 331.4Srillig 4, 341.4Srillig]; 351.4Srillig//indent end 361.5Srillig 371.5Srillig 381.5Srillig// Declarations can be nested. 391.5Srillig//indent input 401.5Srilligstruct level_1 { 411.5Srillig union level_2 { 421.5Srillig enum level_3 { 431.5Srillig level_3_c_1, 441.5Srillig level_3_c_2, 451.5Srillig } level_3; 461.5Srillig } level_2; 471.5Srillig} level_1; 481.5Srillig//indent end 491.5Srillig 501.5Srillig// The outermost declarator 'level_1' is indented as a global variable. 511.5Srillig// The inner declarators 'level_2' and 'level_3' are indented as local 521.5Srillig// variables. 531.5Srillig// XXX: This is inconsistent, as in practice, struct members are usually 541.5Srillig// aligned, while local variables aren't. 551.5Srillig//indent run-equals-input -ldi0 56