From 885a33e117bf7339ecb1d4f3ef12b817cbead81c Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 24 Jan 2018 16:22:30 +0000 Subject: [PATCH] Fix use of boolean_true/false_node (PR 83979) 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. 2018-01-24 Richard Sandiford 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. From-SVN: r257021 --- gcc/ChangeLog | 6 ++++++ gcc/fold-const.c | 24 ++++++++++++------------ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/pr83979.c | 7 +++++++ 4 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/g++.dg/pr83979.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1b64db3eb37..9c313b367d3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-01-24 Richard Sandiford + + PR tree-optimization/83979 + * fold-const.c (fold_comparison): Use constant_boolean_node + instead of boolean_{true,false}_node. + 2018-01-24 Jan Hubicka * ipa-profile.c (ipa_propagate_frequency_1): Fix logic skipping calls diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 1ea37666131..744c3552ead 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -8572,39 +8572,39 @@ fold_comparison (location_t loc, enum tree_code code, tree type, { 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:; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index af42b95cf87..b5ecce01358 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-24 Richard Sandiford + + PR tree-optimization/83979 + * g++.dg/pr83979.c: New test. + 2018-01-24 Kyrylo Tkachov * gcc.dg/lto/20110201-1_0.c: Remove explicit -mfloat-abi=softfp diff --git a/gcc/testsuite/g++.dg/pr83979.c b/gcc/testsuite/g++.dg/pr83979.c new file mode 100644 index 00000000000..a39b1ea6ab9 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr83979.c @@ -0,0 +1,7 @@ +/* { dg-compile } */ + +int +foo (char* p) +{ + return p + 1000 < p; +} -- 2.30.2