diff options
author | Richard Biener <rguenther@suse.de> | 2017-08-01 07:04:10 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-08-01 07:04:10 +0000 |
commit | 5e8fe12fccb2edeb1b699101167b1c921a742bb7 (patch) | |
tree | 4e2d8acc2a1798ae4c5754c00fef9b38f530ecee | |
parent | 93ac482a661be4904563e065f6dd32c04eac1cee (diff) | |
download | gcc-5e8fe12fccb2edeb1b699101167b1c921a742bb7.zip gcc-5e8fe12fccb2edeb1b699101167b1c921a742bb7.tar.gz gcc-5e8fe12fccb2edeb1b699101167b1c921a742bb7.tar.bz2 |
re PR tree-optimization/81297 (ICE in get_single_symbol)
2017-08-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/81297
* tree-vrp.c (get_single_symbol): Remove assert, instead drop
TREE_OVERFLOW from INTEGER_CSTs.
* gcc.dg/torture/pr81297.c: New testcase.
From-SVN: r250758
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr81297.c | 16 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 3 |
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3913f1b..2e96427 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-08-01 Richard Biener <rguenther@suse.de> + + PR tree-optimization/81297 + * tree-vrp.c (get_single_symbol): Remove assert, instead drop + TREE_OVERFLOW from INTEGER_CSTs. + 2017-07-31 Segher Boessenkool <segher@kernel.crashing.org> * config/rs6000/rs6000.c (enum rs6000_reg_type): Delete trailing comma. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9315835..8ae9ef5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-08-01 Richard Biener <rguenther@suse.de> + + PR tree-optimization/81297 + * gcc.dg/torture/pr81297.c: New testcase. + 2017-07-31 Uros Bizjak <ubizjak@gmail.com> * gcc.target/i386/naked-1.c (dg-options): Add -fno-pic. diff --git a/gcc/testsuite/gcc.dg/torture/pr81297.c b/gcc/testsuite/gcc.dg/torture/pr81297.c new file mode 100644 index 0000000..be346c4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr81297.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +int +nf (int gy, int x0) +{ + while (gy < 1) + ++x0; + + gy += !!gy; + if (gy < 0) + { + x0 += gy; + return (x0 > (gy + x0)) ? (1 / 0) : 1; /* { dg-warning "division by zero" } */ + } +} + diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 1f0b688..79a29bf 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -796,7 +796,8 @@ get_single_symbol (tree t, bool *neg, tree *inv) if (TREE_CODE (t) != SSA_NAME) return NULL_TREE; - gcc_assert (! inv_ || ! TREE_OVERFLOW_P (inv_)); + if (inv_ && TREE_OVERFLOW_P (inv_)) + inv_ = drop_tree_overflow (inv_); *neg = neg_; *inv = inv_; |