xref: /netbsd-src/tests/usr.bin/indent/lsym_colon.c (revision 47306038c7d906b62edca1fd252c0e0d0772f5a0)
1*47306038Srillig /* $NetBSD: lsym_colon.c,v 1.5 2022/04/24 09:04:12 rillig Exp $ */
29ae26de1Srillig 
39ae26de1Srillig /*
49ae26de1Srillig  * Tests for the token lsym_colon, which represents a ':' in these contexts:
59ae26de1Srillig  *
69ae26de1Srillig  * After a label that is the target of a 'goto' statement.
79ae26de1Srillig  *
89ae26de1Srillig  * In a 'switch' statement, after a 'case' label or a 'default' label.
99ae26de1Srillig  *
109ae26de1Srillig  * As part of the conditional operator '?:'.
119ae26de1Srillig  *
129ae26de1Srillig  * In the declaration of a struct member that is a bit-field.
13f8e8fcdaSrillig  *
142c9e62c1Srillig  * Since C11, in the _Generic selection to separate the type from its
152c9e62c1Srillig  * corresponding expression.
162c9e62c1Srillig  *
17f8e8fcdaSrillig  * See also:
18f8e8fcdaSrillig  *	label.c
192c9e62c1Srillig  *	lsym_case_label.c	for the C11 _Generic expression
20f8e8fcdaSrillig  *	lsym_question.c
219ae26de1Srillig  */
229ae26de1Srillig 
23f8e8fcdaSrillig /*
24f8e8fcdaSrillig  * The ':' marks a label that can be used in a 'goto' statement.
25f8e8fcdaSrillig  */
26*47306038Srillig //indent input
endless(void)27f8e8fcdaSrillig void endless(void)
28f8e8fcdaSrillig {
29f8e8fcdaSrillig label1:
30f8e8fcdaSrillig goto label2;
31f8e8fcdaSrillig 
32f8e8fcdaSrillig     if (true)if (true)if (true)if (true)label2 :goto label1;
33f8e8fcdaSrillig }
34*47306038Srillig //indent end
35f8e8fcdaSrillig 
36*47306038Srillig //indent run
37f8e8fcdaSrillig void
endless(void)38f8e8fcdaSrillig endless(void)
39f8e8fcdaSrillig {
40f8e8fcdaSrillig label1:
41f8e8fcdaSrillig 	goto label2;
42f8e8fcdaSrillig 
43f8e8fcdaSrillig 	if (true)
44f8e8fcdaSrillig 		if (true)
45f8e8fcdaSrillig 			if (true)
46f8e8fcdaSrillig 				if (true)
47f8e8fcdaSrillig 			label2:		goto label1;
48f8e8fcdaSrillig }
49*47306038Srillig //indent end
50f8e8fcdaSrillig 
51f8e8fcdaSrillig 
52f8e8fcdaSrillig /*
53f8e8fcdaSrillig  * The ':' is used in a 'switch' statement, after a 'case' label or a
54f8e8fcdaSrillig  * 'default' label.
55f8e8fcdaSrillig  */
56*47306038Srillig //indent input
57f8e8fcdaSrillig void
example(void)58f8e8fcdaSrillig example(void)
59f8e8fcdaSrillig {
60f8e8fcdaSrillig 	switch (expr) {
61f8e8fcdaSrillig 	case 'x':
62f8e8fcdaSrillig 		return;
63f8e8fcdaSrillig 	default:
64f8e8fcdaSrillig 		return;
65f8e8fcdaSrillig 	}
66f8e8fcdaSrillig }
67*47306038Srillig //indent end
689ae26de1Srillig 
69*47306038Srillig //indent run-equals-input
70f8e8fcdaSrillig 
71f8e8fcdaSrillig 
72f8e8fcdaSrillig /*
73f8e8fcdaSrillig  * The ':' is used as part of the conditional operator '?:'.
74f8e8fcdaSrillig  */
75*47306038Srillig //indent input
76f8e8fcdaSrillig int constant_expression = true?4:12345;
77*47306038Srillig //indent end
78f8e8fcdaSrillig 
79*47306038Srillig //indent run
80f8e8fcdaSrillig int		constant_expression = true ? 4 : 12345;
81*47306038Srillig //indent end
82f8e8fcdaSrillig 
83f8e8fcdaSrillig 
84f8e8fcdaSrillig /*
85f8e8fcdaSrillig  * The ':' is used in the declaration of a struct member that is a bit-field.
86f8e8fcdaSrillig  */
87*47306038Srillig //indent input
88f8e8fcdaSrillig struct bit_field {
89f8e8fcdaSrillig 	bool flag:1;
90f8e8fcdaSrillig 	int maybe_signed : 4;
91f8e8fcdaSrillig 	signed int definitely_signed:3;
92f8e8fcdaSrillig 	signed int : 0;/* padding */
93f8e8fcdaSrillig 	unsigned int definitely_unsigned:3;
94f8e8fcdaSrillig 	unsigned int:0;/* padding */
95f8e8fcdaSrillig };
96*47306038Srillig //indent end
97f8e8fcdaSrillig 
98*47306038Srillig //indent run
99f8e8fcdaSrillig struct bit_field {
100f8e8fcdaSrillig 	bool		flag:1;
101f8e8fcdaSrillig 	int		maybe_signed:4;
102f8e8fcdaSrillig 	signed int	definitely_signed:3;
103f8e8fcdaSrillig /* $ XXX: Placing the colon directly at the type looks inconsistent. */
104f8e8fcdaSrillig 	signed int:	0;	/* padding */
105f8e8fcdaSrillig 	unsigned int	definitely_unsigned:3;
106f8e8fcdaSrillig /* $ XXX: Placing the colon directly at the type looks inconsistent. */
107f8e8fcdaSrillig 	unsigned int:	0;	/* padding */
108f8e8fcdaSrillig };
109*47306038Srillig //indent end
110