expr.c (expand_expr <COND_EXPR>): Handle the void type semantics of COND_EXPR when...
authorRoger Sayle <roger@eyesopen.com>
Mon, 6 Oct 2003 23:11:21 +0000 (23:11 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Mon, 6 Oct 2003 23:11:21 +0000 (23:11 +0000)
* expr.c (expand_expr <COND_EXPR>): Handle the void type semantics
of COND_EXPR when expanding the "A op 0 ? FOO : A" optimizations.

From-SVN: r72172

gcc/ChangeLog
gcc/expr.c

index 06ea611..b0a81bc 100644 (file)
@@ -1,4 +1,9 @@
 2003-10-06  Roger Sayle  <roger@eyesopen.com>
+
+       * expr.c (expand_expr <COND_EXPR>): Handle the void type semantics
+       of COND_EXPR when expanding the "A op 0 ? FOO : A" optimizations.
+
+2003-10-06  Roger Sayle  <roger@eyesopen.com>
            Zack Weinberg  <zack@codesourcery.com>
 
        * optabs.c (prepare_float_lib_cmp): Avoid searching for REG_RETVAL
index 26eaab0..edc4290 100644 (file)
@@ -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