xref: /netbsd-src/tests/usr.bin/xlint/lint1/d_c99_compound_literal_comma.c (revision e6298b924c5ba98f3a22919b56dab04a87cdbb1c)
1*e6298b92Srillig /*	$NetBSD: d_c99_compound_literal_comma.c,v 1.4 2023/07/07 19:45:22 rillig Exp $	*/
2aadcb6a6Srillig # 3 "d_c99_compound_literal_comma.c"
3aadcb6a6Srillig 
4941875baSrillig /*-
5941875baSrillig  * Ensure that compound literals can be parsed.
6941875baSrillig  *
7941875baSrillig  * C99 6.5.2 "Postfix operators" for the syntax.
8941875baSrillig  * C99 6.5.2.5 "Compound literals" for the semantics.
9941875baSrillig  */
10941875baSrillig 
11*e6298b92Srillig /* lint1-extra-flags: -X 351 */
12*e6298b92Srillig 
13941875baSrillig struct point {
14941875baSrillig 	int x;
15941875baSrillig 	int y;
162a8cfbd2Schristos };
172a8cfbd2Schristos 
18941875baSrillig struct point
point_abs(struct point point)19941875baSrillig point_abs(struct point point)
202a8cfbd2Schristos {
21941875baSrillig 	/* No designators, no trailing comma. */
22941875baSrillig 	if (point.x >= 0 && point.y >= 0)
23941875baSrillig 		return (struct point){ point.x, point.y };
242a8cfbd2Schristos 
25941875baSrillig 	/* Designators, no trailing comma. */
26941875baSrillig 	if (point.x >= 0)
27941875baSrillig 		return (struct point){ .x = point.x, .y = -point.y };
28941875baSrillig 
29941875baSrillig 	/* No designators, trailing comma. */
30941875baSrillig 	if (point.y >= 0)
31941875baSrillig 		return (struct point){ point.x, point.y, };
32941875baSrillig 
33941875baSrillig 	/* Designators, trailing comma. */
34941875baSrillig 	return (struct point){ .x = point.x, .y = -point.y, };
352a8cfbd2Schristos }
36