Message ID | 87lggo4y18.fsf@linaro.org |
---|---|
State | New |
Headers | show |
Series | Fix use of boolean_true/false_node (PR 83979) | expand |
On Tue, Jan 23, 2018 at 12:25 PM, Richard Sandiford <richard.sandiford@linaro.org> wrote: > r255913 changed some constant_boolean_node calls to boolean_true_node > and boolean_false_node, which meant that the returned tree didn't > always have the right type. > > Tested on aarch64-linux-gnu. Probably bordering on obvious, but just > in case: OK to install? Ok. Richard. > Richard > > > 2018-01-23 Richard Sandiford <richard.sandiford@linaro.org> > > gcc/ > PR tree-optimization/83979 > * fold-const.c (fold_comparison): Use constant_boolean_node > instead of boolean_{true,false}_node. > > gcc/testsuite/ > PR tree-optimization/83979 > * g++.dg/pr83979.c: New test. > > Index: gcc/fold-const.c > =================================================================== > --- gcc/fold-const.c 2018-01-16 15:13:19.643832679 +0000 > +++ gcc/fold-const.c 2018-01-23 11:23:59.982555852 +0000 > @@ -8572,39 +8572,39 @@ fold_comparison (location_t loc, enum tr > { > case EQ_EXPR: > if (known_eq (bitpos0, bitpos1)) > - return boolean_true_node; > + return constant_boolean_node (true, type); > if (known_ne (bitpos0, bitpos1)) > - return boolean_false_node; > + return constant_boolean_node (false, type); > break; > case NE_EXPR: > if (known_ne (bitpos0, bitpos1)) > - return boolean_true_node; > + return constant_boolean_node (true, type); > if (known_eq (bitpos0, bitpos1)) > - return boolean_false_node; > + return constant_boolean_node (false, type); > break; > case LT_EXPR: > if (known_lt (bitpos0, bitpos1)) > - return boolean_true_node; > + return constant_boolean_node (true, type); > if (known_ge (bitpos0, bitpos1)) > - return boolean_false_node; > + return constant_boolean_node (false, type); > break; > case LE_EXPR: > if (known_le (bitpos0, bitpos1)) > - return boolean_true_node; > + return constant_boolean_node (true, type); > if (known_gt (bitpos0, bitpos1)) > - return boolean_false_node; > + return constant_boolean_node (false, type); > break; > case GE_EXPR: > if (known_ge (bitpos0, bitpos1)) > - return boolean_true_node; > + return constant_boolean_node (true, type); > if (known_lt (bitpos0, bitpos1)) > - return boolean_false_node; > + return constant_boolean_node (false, type); > break; > case GT_EXPR: > if (known_gt (bitpos0, bitpos1)) > - return boolean_true_node; > + return constant_boolean_node (true, type); > if (known_le (bitpos0, bitpos1)) > - return boolean_false_node; > + return constant_boolean_node (false, type); > break; > default:; > } > Index: gcc/testsuite/g++.dg/pr83979.c > =================================================================== > --- /dev/null 2018-01-22 18:46:35.983712806 +0000 > +++ gcc/testsuite/g++.dg/pr83979.c 2018-01-23 11:23:59.982555852 +0000 > @@ -0,0 +1,7 @@ > +/* { dg-compile } */ > + > +int > +foo (char* p) > +{ > + return p + 1000 < p; > +}
Index: gcc/fold-const.c =================================================================== --- gcc/fold-const.c 2018-01-16 15:13:19.643832679 +0000 +++ gcc/fold-const.c 2018-01-23 11:23:59.982555852 +0000 @@ -8572,39 +8572,39 @@ fold_comparison (location_t loc, enum tr { case EQ_EXPR: if (known_eq (bitpos0, bitpos1)) - return boolean_true_node; + return constant_boolean_node (true, type); if (known_ne (bitpos0, bitpos1)) - return boolean_false_node; + return constant_boolean_node (false, type); break; case NE_EXPR: if (known_ne (bitpos0, bitpos1)) - return boolean_true_node; + return constant_boolean_node (true, type); if (known_eq (bitpos0, bitpos1)) - return boolean_false_node; + return constant_boolean_node (false, type); break; case LT_EXPR: if (known_lt (bitpos0, bitpos1)) - return boolean_true_node; + return constant_boolean_node (true, type); if (known_ge (bitpos0, bitpos1)) - return boolean_false_node; + return constant_boolean_node (false, type); break; case LE_EXPR: if (known_le (bitpos0, bitpos1)) - return boolean_true_node; + return constant_boolean_node (true, type); if (known_gt (bitpos0, bitpos1)) - return boolean_false_node; + return constant_boolean_node (false, type); break; case GE_EXPR: if (known_ge (bitpos0, bitpos1)) - return boolean_true_node; + return constant_boolean_node (true, type); if (known_lt (bitpos0, bitpos1)) - return boolean_false_node; + return constant_boolean_node (false, type); break; case GT_EXPR: if (known_gt (bitpos0, bitpos1)) - return boolean_true_node; + return constant_boolean_node (true, type); if (known_le (bitpos0, bitpos1)) - return boolean_false_node; + return constant_boolean_node (false, type); break; default:; } Index: gcc/testsuite/g++.dg/pr83979.c =================================================================== --- /dev/null 2018-01-22 18:46:35.983712806 +0000 +++ gcc/testsuite/g++.dg/pr83979.c 2018-01-23 11:23:59.982555852 +0000 @@ -0,0 +1,7 @@ +/* { dg-compile } */ + +int +foo (char* p) +{ + return p + 1000 < p; +}