+2005-10-20 Richard Guenther <rguenther@suse.de>
+
+ PR c++/24439
+ * fold-const.c (invert_truthvalue): Handle COND_EXPR with
+ void type operands.
+
2005-10-20 Eric Botcazou <ebotcazou@libertysurf.fr>
PR rtl-optimization/23585
return TREE_OPERAND (arg, 0);
case COND_EXPR:
- return build3 (COND_EXPR, type, TREE_OPERAND (arg, 0),
- invert_truthvalue (TREE_OPERAND (arg, 1)),
- invert_truthvalue (TREE_OPERAND (arg, 2)));
+ {
+ tree arg1 = TREE_OPERAND (arg, 1);
+ tree arg2 = TREE_OPERAND (arg, 2);
+ /* A COND_EXPR may have a throw as one operand, which
+ then has void type. Just leave void operands
+ as they are. */
+ return build3 (COND_EXPR, type, TREE_OPERAND (arg, 0),
+ VOID_TYPE_P (TREE_TYPE (arg1))
+ ? arg1 : invert_truthvalue (arg1),
+ VOID_TYPE_P (TREE_TYPE (arg2))
+ ? arg2 : invert_truthvalue (arg2));
+ }
case COMPOUND_EXPR:
return build2 (COMPOUND_EXPR, type, TREE_OPERAND (arg, 0),
+2005-10-20 Richard Guenther <rguenther@suse.de>
+
+ PR c++/24439
+ * g++.dg/tree-ssa/pr24439.C: New testcase.
+
2005-10-20 Eric Botcazou <ebotcazou@libertysurf.fr>
* g++.dg/opt/delay-slot-1.C: New test.