re PR c++/27115 (ICE in cp_expr_size or miscompilation with statement expressions...
authorJason Merrill <jason@gcc.gnu.org>
Mon, 21 Aug 2006 20:54:57 +0000 (16:54 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 21 Aug 2006 20:54:57 +0000 (16:54 -0400)
commitc6c7698dfd268ad41c9ca00a8c49333d09c51e20
tree38fad6e6bb826a12c58767da330650091c1f7cd9
parent63b263936ed5ce953ec313d858cb20a1dcb7ebfa
re PR c++/27115 (ICE in cp_expr_size or miscompilation with statement expressions and constructors (and ?: ))

        PR c++/27115
        * gimplify.c (voidify_wrapper_expr): Handle STATEMENT_LIST as a
        wrapper.  Loop to handle nested wrappers.
        (gimplify_bind_expr): Remove temp parameter.
        (gimplify_modify_expr_rhs): Handle CLEANUP_POINT_EXPR, BIND_EXPR
        and STATEMENT_LIST on the rhs.
        (gimplify_statement_list): Voidify the STATEMENT_LIST.
        (gimplify_expr): Pass pre_p to gimplify_statement_list.
        (gimplify_target_expr): Remove special BIND_EXPR handling.
        * cp/semantics.c (finish_stmt_expr_expr): Don't try to voidify here,
        just leave the expression as it is.
        (finish_stmt_expr): If the statement-expression has class type,
        wrap it in a TARGET_EXPR.
        * cp/cp-gimplify.c (cp_gimplify_init_expr): Don't bother with
        CLEANUP_POINT_EXPR.
        * cp/except.c (build_throw): Give the CLEANUP_POINT_EXPR void type.

From-SVN: r116311
gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/cp-gimplify.c
gcc/cp/except.c
gcc/cp/semantics.c
gcc/gimplify.c
gcc/testsuite/g++.dg/abi/forced-sticky.C [new file with mode: 0644]
gcc/testsuite/g++.dg/abi/forced.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/stmtexpr8.C [new file with mode: 0644]