aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2019-11-04 21:41:12 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2019-11-04 21:41:12 +0000
commit8ced1d76b143b6856699f815813045d551e3cef9 (patch)
treed70528682f093bb308726e1a647bda8b36090b30
parenta1b680597178df866e6de80444695fab82b90492 (diff)
downloadgcc-8ced1d76b143b6856699f815813045d551e3cef9.zip
gcc-8ced1d76b143b6856699f815813045d551e3cef9.tar.gz
gcc-8ced1d76b143b6856699f815813045d551e3cef9.tar.bz2
Use the value_range_base constructors in value_range_base::invert to
make sure we build canonically correct ranges. From-SVN: r277794
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-vrp.c6
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c585360..6bdd5ff 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2019-11-04 Aldy Hernandez <aldyh@redhat.com>
+ * tree-vrp.c (value_range_base::invert): Use constructors to build
+ range.
+
+2019-11-04 Aldy Hernandez <aldyh@redhat.com>
+
* tree-vrp.c (range_int_cst_singleton_p): Remove.
* tree-vrp.h (range_int_cst_singleton_p): Remove.
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 070db90..085308e 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -6286,10 +6286,12 @@ value_range_base::contains_p (tree cst) const
void
value_range_base::invert ()
{
+ /* We can't just invert VR_RANGE and VR_ANTI_RANGE because we may
+ create non-canonical ranges. Use the constructors instead. */
if (m_kind == VR_RANGE)
- m_kind = VR_ANTI_RANGE;
+ *this = value_range_base (VR_ANTI_RANGE, m_min, m_max);
else if (m_kind == VR_ANTI_RANGE)
- m_kind = VR_RANGE;
+ *this = value_range_base (VR_RANGE, m_min, m_max);
else
gcc_unreachable ();
}