From: Nathan Sidwell Date: Tue, 24 Aug 1999 20:49:12 +0000 (+0000) Subject: expr.c (expand_expr): Cope with COND_EXPRs with one non-returning branch. X-Git-Tag: prereleases/libstdc++-2.92~11078 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2ac84cfe01bfb92a83f18263740435f696321e32;p=thirdparty%2Fgcc.git expr.c (expand_expr): Cope with COND_EXPRs with one non-returning branch. * expr.c (expand_expr): Cope with COND_EXPRs with one non-returning branch. From-SVN: r28825 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4681f69447e5..b107d30a121c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Tue Aug 24 13:48:39 1999 Nathan Sidwell + + * expr.c (expand_expr): Cope with COND_EXPRs with one + non-returning branch. + Mon Aug 23 22:28:16 1999 Mark Mitchell * expr.c (store_expr): Always pass down the target, even when not diff --git a/gcc/expr.c b/gcc/expr.c index 7783bf97b803..97bf5a9fa00b 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -7700,7 +7700,11 @@ expand_expr (exp, target, tmode, modifier) jumpifnot (TREE_OPERAND (exp, 0), op0); start_cleanup_deferral (); - if (temp != 0) + + /* One branch of the cond can be void, if it never returns. For + example A ? throw : E */ + if (temp != 0 + && TREE_TYPE (TREE_OPERAND (exp, 1)) != void_type_node) store_expr (TREE_OPERAND (exp, 1), temp, 0); else expand_expr (TREE_OPERAND (exp, 1), @@ -7711,7 +7715,8 @@ expand_expr (exp, target, tmode, modifier) emit_barrier (); emit_label (op0); start_cleanup_deferral (); - if (temp != 0) + if (temp != 0 + && TREE_TYPE (TREE_OPERAND (exp, 2)) != void_type_node) store_expr (TREE_OPERAND (exp, 2), temp, 0); else expand_expr (TREE_OPERAND (exp, 2),