xref: /netbsd-src/tests/usr.bin/indent/lsym_semicolon.c (revision 95820b5370230cc0c1b63cb504d714d2aa7f7b4a)
1*95820b53Srillig /* $NetBSD: lsym_semicolon.c,v 1.6 2023/06/16 23:19:01 rillig Exp $ */
29ae26de1Srillig 
39ae26de1Srillig /*
49ae26de1Srillig  * Tests for the token lsym_semicolon, which represents ';' in these contexts:
59ae26de1Srillig  *
69ae26de1Srillig  * In a declaration, ';' finishes the declaration.
79ae26de1Srillig  *
89ae26de1Srillig  * In a statement, ';' finishes the statement.
99ae26de1Srillig  *
109ae26de1Srillig  * In a 'for' statement, ';' separates the 3 expressions in the head of the
119ae26de1Srillig  * 'for' statement.
129ae26de1Srillig  */
139ae26de1Srillig 
1447306038Srillig //indent input
15b60cb68fSrillig struct {
16b60cb68fSrillig 	int member;
17b60cb68fSrillig } global_var;
1847306038Srillig //indent end
199ae26de1Srillig 
20b60cb68fSrillig //indent run-equals-input -di0
21b60cb68fSrillig 
22b60cb68fSrillig 
23b60cb68fSrillig //indent input
24b60cb68fSrillig void
function(void)25b60cb68fSrillig function(void)
26b60cb68fSrillig {
27b60cb68fSrillig 	for ( ; ; )
28b60cb68fSrillig 		stmt();
29b60cb68fSrillig 	for (;;)
30b60cb68fSrillig 		stmt();
31b60cb68fSrillig }
32b60cb68fSrillig //indent end
33b60cb68fSrillig 
34b60cb68fSrillig //indent run
35b60cb68fSrillig void
function(void)36b60cb68fSrillig function(void)
37b60cb68fSrillig {
38b60cb68fSrillig 	for (;;)
39b60cb68fSrillig 		stmt();
40b60cb68fSrillig 	for (;;)
41b60cb68fSrillig 		stmt();
42b60cb68fSrillig }
43b60cb68fSrillig //indent end
440982fd88Srillig 
450982fd88Srillig 
460982fd88Srillig //indent input
470982fd88Srillig {
480982fd88Srillig 	switch (expr) {
490982fd88Srillig // $ FIXME: Indent the 'case' at the 'switch'.
500982fd88Srillig 		case;
510982fd88Srillig 		stmt;
520982fd88Srillig 	case 2:
530982fd88Srillig 		stmt;
540982fd88Srillig 	}
550982fd88Srillig }
560982fd88Srillig //indent end
570982fd88Srillig 
580982fd88Srillig //indent run-equals-input
590982fd88Srillig 
600982fd88Srillig 
610982fd88Srillig /*
620982fd88Srillig  * A semicolon closes all possibly open '?:' expressions, so that the next ':'
630982fd88Srillig  * is interpreted as a bit-field.
640982fd88Srillig  */
650982fd88Srillig //indent input
660982fd88Srillig struct s {
670982fd88Srillig 	int a[len ? ? ? 1];
680982fd88Srillig 	int bit_field:1;
690982fd88Srillig };
700982fd88Srillig //indent end
710982fd88Srillig 
720982fd88Srillig //indent run-equals-input -di0
730982fd88Srillig 
740982fd88Srillig 
750982fd88Srillig /*
760982fd88Srillig  * A semicolon does not magically close any initializer braces that may still
770982fd88Srillig  * be open.
780982fd88Srillig  */
790982fd88Srillig //indent input
800982fd88Srillig int a = {{;
810982fd88Srillig int b = 3;
820982fd88Srillig //indent end
830982fd88Srillig 
840982fd88Srillig //indent run -di0
850982fd88Srillig int a = {{;
860982fd88Srillig 		int b = 3;
87*95820b53Srillig // exit 1
88*95820b53Srillig // error: Standard Input:2: Stuff missing from end of file
890982fd88Srillig //indent end
900982fd88Srillig 
910982fd88Srillig 
920982fd88Srillig //indent input
930982fd88Srillig {
940982fd88Srillig 	int a = {{;
950982fd88Srillig 	int b = 3;
960982fd88Srillig }
970982fd88Srillig //indent end
980982fd88Srillig 
990982fd88Srillig //indent run -di0
1000982fd88Srillig {
1010982fd88Srillig 	int a = {{;
1020982fd88Srillig 			int b = 3;
1030982fd88Srillig 	}
104*95820b53Srillig // exit 1
105*95820b53Srillig // error: Standard Input:4: Stuff missing from end of file
1060982fd88Srillig //indent end
107