gcc_statement_expression.c revision 1.2
1/* $NetBSD: gcc_statement_expression.c,v 1.2 2023/07/15 13:51:36 rillig Exp $ */ 2# 3 "gcc_statement_expression.c" 3 4/* 5 * Tests for the GCC extension 'statement expressions', which allows a block of 6 * statements to occur as part of an expression. 7 */ 8 9 10// Ensure that the inner types are accessible from outside the block. 11// Depending on the memory management strategy, the inner types might be freed 12// too early. 13static inline int 14use_inner_type_from_outside(void) 15{ 16 int x = ({ 17 struct outer { 18 struct inner { 19 int member; 20 } inner; 21 } outer = { { 3 } }; 22 outer; 23 }).inner.member; 24 /* expect-1: error: type 'struct outer' does not have member 'inner' [101] */ 25 /* expect-2: error: type 'int' does not have member 'member' [101] */ 26 /* 27 * FIXME: The above types must not be removed from the symbol table 28 * yet; at least, their member names must still be known. 29 */ 30 31 return x; 32} 33