/* $NetBSD: fmt_expr.c,v 1.11 2023/12/03 14:26:10 rillig Exp $ */ /* * Tests for all kinds of expressions that are not directly related to unary * or binary operators. * * See also: * lsym_binary_op.c * lsym_unary_op.c */ //indent input { // See lsym_offsetof.c. malloc(offsetof(struct s, f) + 1); // C99 compound literals use initializer braces. println((const char[3]){'-', c, '\0'}); x = ((struct point){0, 0}).x; for (ln = gnodes->first; ln != NULL; ln = ln->next) *(GNode **)Vector_Push(&vec) = ln->datum; } //indent end //indent run-equals-input /* * GCC statement expressions are not supported yet. */ //indent input { int var = ({1}); int var = ({ 1 }); int var = ({ int decl = 1; stmt; }); } //indent end //indent run -di0 { int var = ({1}); int var = ({ 1 }); int var = ({ int decl = 1; stmt; }); } // exit 1 // error: Standard Input:7: Unbalanced parentheses // warning: Standard Input:9: Extra ')' //indent end // A compound expression with an unknown type is indented other than one with // a known type. Ideally, both cases should be treated the same. //indent input { var = (type) { .member = value }; var = (type) { value, value, value }; var = (struct s) { .member = value }; var = (struct s) { value, value, value }; } //indent end //indent run { var = (type) { .member = value }; var = (type) { value, value, value }; var = (struct s){.member = value}; var = (struct s){value, value, value}; } //indent end