From c37b68d42af9dfe0561541be06879f6cdb0f0532 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Mon, 6 Oct 2003 23:11:21 +0000 Subject: [PATCH] expr.c (expand_expr ): Handle the void type semantics of COND_EXPR when expanding the "A op 0 ? FOO ... * expr.c (expand_expr ): Handle the void type semantics of COND_EXPR when expanding the "A op 0 ? FOO : A" optimizations. From-SVN: r72172 --- gcc/ChangeLog | 5 +++++ gcc/expr.c | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 06ea6114c54..b0a81bc511b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-10-06 Roger Sayle + + * expr.c (expand_expr ): Handle the void type semantics + of COND_EXPR when expanding the "A op 0 ? FOO : A" optimizations. + 2003-10-06 Roger Sayle Zack Weinberg diff --git a/gcc/expr.c b/gcc/expr.c index 26eaab01452..edc42908bf0 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -8910,8 +8910,12 @@ expand_expr (tree exp, rtx target, enum machine_mode tmode, jumpif (TREE_OPERAND (exp, 0), op0); start_cleanup_deferral (); - store_expr (TREE_OPERAND (exp, 2), temp, - modifier == EXPAND_STACK_PARM ? 2 : 0); + if (TREE_TYPE (TREE_OPERAND (exp, 2)) != void_type_node) + store_expr (TREE_OPERAND (exp, 2), temp, + modifier == EXPAND_STACK_PARM ? 2 : 0); + else + expand_expr (TREE_OPERAND (exp, 2), + ignore ? const0_rtx : NULL_RTX, VOIDmode, 0); op1 = op0; } else if (temp @@ -8931,8 +8935,12 @@ expand_expr (tree exp, rtx target, enum machine_mode tmode, jumpifnot (TREE_OPERAND (exp, 0), op0); start_cleanup_deferral (); - store_expr (TREE_OPERAND (exp, 1), temp, - modifier == EXPAND_STACK_PARM ? 2 : 0); + if (TREE_TYPE (TREE_OPERAND (exp, 1)) != void_type_node) + store_expr (TREE_OPERAND (exp, 1), temp, + modifier == EXPAND_STACK_PARM ? 2 : 0); + else + expand_expr (TREE_OPERAND (exp, 1), + ignore ? const0_rtx : NULL_RTX, VOIDmode, 0); op1 = op0; } else -- 2.30.2