1 1.4 rillig /* $NetBSD: d_c99_compound_literal_comma.c,v 1.4 2023/07/07 19:45:22 rillig Exp $ */ 2 1.2 rillig # 3 "d_c99_compound_literal_comma.c" 3 1.2 rillig 4 1.3 rillig /*- 5 1.3 rillig * Ensure that compound literals can be parsed. 6 1.3 rillig * 7 1.3 rillig * C99 6.5.2 "Postfix operators" for the syntax. 8 1.3 rillig * C99 6.5.2.5 "Compound literals" for the semantics. 9 1.3 rillig */ 10 1.3 rillig 11 1.4 rillig /* lint1-extra-flags: -X 351 */ 12 1.4 rillig 13 1.3 rillig struct point { 14 1.3 rillig int x; 15 1.3 rillig int y; 16 1.1 christos }; 17 1.1 christos 18 1.3 rillig struct point 19 1.3 rillig point_abs(struct point point) 20 1.1 christos { 21 1.3 rillig /* No designators, no trailing comma. */ 22 1.3 rillig if (point.x >= 0 && point.y >= 0) 23 1.3 rillig return (struct point){ point.x, point.y }; 24 1.3 rillig 25 1.3 rillig /* Designators, no trailing comma. */ 26 1.3 rillig if (point.x >= 0) 27 1.3 rillig return (struct point){ .x = point.x, .y = -point.y }; 28 1.3 rillig 29 1.3 rillig /* No designators, trailing comma. */ 30 1.3 rillig if (point.y >= 0) 31 1.3 rillig return (struct point){ point.x, point.y, }; 32 1.1 christos 33 1.3 rillig /* Designators, trailing comma. */ 34 1.3 rillig return (struct point){ .x = point.x, .y = -point.y, }; 35 1.1 christos } 36