11.6Srillig/* $NetBSD: lsym_semicolon.c,v 1.6 2023/06/16 23:19:01 rillig Exp $ */
21.1Srillig
31.1Srillig/*
41.1Srillig * Tests for the token lsym_semicolon, which represents ';' in these contexts:
51.1Srillig *
61.1Srillig * In a declaration, ';' finishes the declaration.
71.1Srillig *
81.1Srillig * In a statement, ';' finishes the statement.
91.1Srillig *
101.1Srillig * In a 'for' statement, ';' separates the 3 expressions in the head of the
111.1Srillig * 'for' statement.
121.1Srillig */
131.1Srillig
141.3Srillig//indent input
151.4Srilligstruct {
161.4Srillig	int member;
171.4Srillig} global_var;
181.3Srillig//indent end
191.1Srillig
201.4Srillig//indent run-equals-input -di0
211.4Srillig
221.4Srillig
231.4Srillig//indent input
241.4Srilligvoid
251.4Srilligfunction(void)
261.4Srillig{
271.4Srillig	for ( ; ; )
281.4Srillig		stmt();
291.4Srillig	for (;;)
301.4Srillig		stmt();
311.4Srillig}
321.4Srillig//indent end
331.4Srillig
341.4Srillig//indent run
351.4Srilligvoid
361.4Srilligfunction(void)
371.4Srillig{
381.4Srillig	for (;;)
391.4Srillig		stmt();
401.4Srillig	for (;;)
411.4Srillig		stmt();
421.4Srillig}
431.4Srillig//indent end
441.5Srillig
451.5Srillig
461.5Srillig//indent input
471.5Srillig{
481.5Srillig	switch (expr) {
491.5Srillig// $ FIXME: Indent the 'case' at the 'switch'.
501.5Srillig		case;
511.5Srillig		stmt;
521.5Srillig	case 2:
531.5Srillig		stmt;
541.5Srillig	}
551.5Srillig}
561.5Srillig//indent end
571.5Srillig
581.5Srillig//indent run-equals-input
591.5Srillig
601.5Srillig
611.5Srillig/*
621.5Srillig * A semicolon closes all possibly open '?:' expressions, so that the next ':'
631.5Srillig * is interpreted as a bit-field.
641.5Srillig */
651.5Srillig//indent input
661.5Srilligstruct s {
671.5Srillig	int a[len ? ? ? 1];
681.5Srillig	int bit_field:1;
691.5Srillig};
701.5Srillig//indent end
711.5Srillig
721.5Srillig//indent run-equals-input -di0
731.5Srillig
741.5Srillig
751.5Srillig/*
761.5Srillig * A semicolon does not magically close any initializer braces that may still
771.5Srillig * be open.
781.5Srillig */
791.5Srillig//indent input
801.5Srilligint a = {{;
811.5Srilligint b = 3;
821.5Srillig//indent end
831.5Srillig
841.5Srillig//indent run -di0
851.5Srilligint a = {{;
861.5Srillig		int b = 3;
871.6Srillig// exit 1
881.6Srillig// error: Standard Input:2: Stuff missing from end of file
891.5Srillig//indent end
901.5Srillig
911.5Srillig
921.5Srillig//indent input
931.5Srillig{
941.5Srillig	int a = {{;
951.5Srillig	int b = 3;
961.5Srillig}
971.5Srillig//indent end
981.5Srillig
991.5Srillig//indent run -di0
1001.5Srillig{
1011.5Srillig	int a = {{;
1021.5Srillig			int b = 3;
1031.5Srillig	}
1041.6Srillig// exit 1
1051.6Srillig// error: Standard Input:4: Stuff missing from end of file
1061.5Srillig//indent end
107