diff options
author | Roger Sayle <roger@eyesopen.com> | 2004-12-11 13:46:37 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2004-12-11 13:46:37 +0000 |
commit | ec7e2228d1837ecd3dead85408930799083b04f7 (patch) | |
tree | 9034b0a5e8cd5010cf9987f03fb424de0e508885 /gcc/fold-const.c | |
parent | 49e4d5803eefeeb9d791af1900877831ce94481a (diff) | |
download | gcc-ec7e2228d1837ecd3dead85408930799083b04f7.zip gcc-ec7e2228d1837ecd3dead85408930799083b04f7.tar.gz gcc-ec7e2228d1837ecd3dead85408930799083b04f7.tar.bz2 |
re PR middle-end/18921 (wrong code with operator "?")
PR middle-end/18921
* fold-const.c (fold_unwidened_comparison): Use omit_one_operand
instead of constant_boolean_node as arg0 may have side-effects.
* gcc.dg/pr18921-1.c: New test case.
From-SVN: r92030
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 878cbd9..da7a284 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -6023,27 +6023,27 @@ fold_widened_comparison (enum tree_code code, tree type, tree arg0, tree arg1) { case EQ_EXPR: if (above || below) - return constant_boolean_node (false, type); + return omit_one_operand (type, integer_zero_node, arg0); break; case NE_EXPR: if (above || below) - return constant_boolean_node (true, type); + return omit_one_operand (type, integer_one_node, arg0); break; case LT_EXPR: case LE_EXPR: if (above) - return constant_boolean_node (true, type); + return omit_one_operand (type, integer_one_node, arg0); else if (below) - return constant_boolean_node (false, type);; + return omit_one_operand (type, integer_zero_node, arg0); case GT_EXPR: case GE_EXPR: if (above) - return constant_boolean_node (false, type); + return omit_one_operand (type, integer_zero_node, arg0); else if (below) - return constant_boolean_node (true, type);; + return omit_one_operand (type, integer_one_node, arg0); default: break; |