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