xref: /netbsd-src/tests/usr.bin/indent/fmt_expr.c (revision 0fde8763035dafb8cbc44a68fa808d77322134ad)
1*0fde8763Srillig /* $NetBSD: fmt_expr.c,v 1.11 2023/12/03 14:26:10 rillig Exp $ */
20938f454Srillig 
30938f454Srillig /*
40938f454Srillig  * Tests for all kinds of expressions that are not directly related to unary
50938f454Srillig  * or binary operators.
60938f454Srillig  *
76c6e6473Srillig  * See also:
86c6e6473Srillig  *	lsym_binary_op.c
96c6e6473Srillig  *	lsym_unary_op.c
100938f454Srillig  */
110938f454Srillig 
121cc57250Srillig //indent input
131cc57250Srillig {
141fc3c56eSrillig 	// See lsym_offsetof.c.
151fc3c56eSrillig 	malloc(offsetof(struct s, f) + 1);
161fc3c56eSrillig 
171fc3c56eSrillig 	// C99 compound literals use initializer braces.
181fc3c56eSrillig 	println((const char[3]){'-', c, '\0'});
191fc3c56eSrillig 	x = ((struct point){0, 0}).x;
201fc3c56eSrillig 
211cc57250Srillig 	for (ln = gnodes->first; ln != NULL; ln = ln->next)
221cc57250Srillig 		*(GNode **)Vector_Push(&vec) = ln->datum;
231cc57250Srillig }
241cc57250Srillig //indent end
251cc57250Srillig 
261cc57250Srillig //indent run-equals-input
27f6ead5d9Srillig 
28f6ead5d9Srillig 
29f6ead5d9Srillig /*
30f6ead5d9Srillig  * GCC statement expressions are not supported yet.
31f6ead5d9Srillig  */
32f6ead5d9Srillig //indent input
33f6ead5d9Srillig {
34f6ead5d9Srillig 	int var = ({1});
35f6ead5d9Srillig 	int var = ({
36f6ead5d9Srillig 		1
37f6ead5d9Srillig 	});
38f6ead5d9Srillig 	int var = ({
39f6ead5d9Srillig 		int decl = 1;
40f6ead5d9Srillig 		stmt;
41f6ead5d9Srillig 	});
42f6ead5d9Srillig }
43f6ead5d9Srillig //indent end
44f6ead5d9Srillig 
45f6ead5d9Srillig //indent run -di0
46f6ead5d9Srillig {
47f6ead5d9Srillig 	int var = ({1});
48f6ead5d9Srillig 	int var = ({
49f6ead5d9Srillig 		   1
50f6ead5d9Srillig 		   });
51f6ead5d9Srillig 	int var = ({
52f6ead5d9Srillig 		   int decl = 1;
53f6ead5d9Srillig 		stmt;
54f6ead5d9Srillig 	});
55f6ead5d9Srillig }
5695820b53Srillig // exit 1
5795820b53Srillig // error: Standard Input:7: Unbalanced parentheses
5895820b53Srillig // warning: Standard Input:9: Extra ')'
59f6ead5d9Srillig //indent end
60*0fde8763Srillig 
61*0fde8763Srillig 
62*0fde8763Srillig // A compound expression with an unknown type is indented other than one with
63*0fde8763Srillig // a known type.  Ideally, both cases should be treated the same.
64*0fde8763Srillig //indent input
65*0fde8763Srillig {
66*0fde8763Srillig 	var = (type) { .member = value };
67*0fde8763Srillig 	var = (type) { value, value, value };
68*0fde8763Srillig 	var = (struct s) { .member = value };
69*0fde8763Srillig 	var = (struct s) { value, value, value };
70*0fde8763Srillig }
71*0fde8763Srillig //indent end
72*0fde8763Srillig 
73*0fde8763Srillig //indent run
74*0fde8763Srillig {
75*0fde8763Srillig 	var = (type) {
76*0fde8763Srillig 		.member = value
77*0fde8763Srillig 	};
78*0fde8763Srillig 	var = (type) {
79*0fde8763Srillig 		value, value, value
80*0fde8763Srillig 	};
81*0fde8763Srillig 	var = (struct s){.member = value};
82*0fde8763Srillig 	var = (struct s){value, value, value};
83*0fde8763Srillig }
84*0fde8763Srillig //indent end
85