aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-11-26 09:43:27 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2019-11-26 09:43:27 +0100
commit89789ec91d14bf5aca8a0a60dcbf7ee6e0bed5c5 (patch)
treeacef6a0d29e49bb359cac97102d6e46a331cf467 /gcc
parentf4a74d2786ec812e40cfd0b3b7fa3cbeb2093444 (diff)
downloadgcc-89789ec91d14bf5aca8a0a60dcbf7ee6e0bed5c5.zip
gcc-89789ec91d14bf5aca8a0a60dcbf7ee6e0bed5c5.tar.gz
gcc-89789ec91d14bf5aca8a0a60dcbf7ee6e0bed5c5.tar.bz2
re PR tree-optimization/92644 (ICE in wide_int_to_tree_1, at tree.c:1530)
PR tree-optimization/92644 * tree-ssa-phiopt.c (minmax_replacement): Add INTEGRAL_TYPE_P check next to INTEGER_CST checks. * g++.dg/opt/pr92644.C: New test. From-SVN: r278720
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/opt/pr92644.C6
-rw-r--r--gcc/tree-ssa-phiopt.c9
4 files changed, 23 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6ea6e5b..633836f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-11-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/92644
+ * tree-ssa-phiopt.c (minmax_replacement): Add INTEGRAL_TYPE_P check
+ next to INTEGER_CST checks.
+
2019-11-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/92645
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d105b60..325572b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-11-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/92644
+ * g++.dg/opt/pr92644.C: New test.
+
2019-11-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/92645
diff --git a/gcc/testsuite/g++.dg/opt/pr92644.C b/gcc/testsuite/g++.dg/opt/pr92644.C
new file mode 100644
index 0000000..2f8a86f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr92644.C
@@ -0,0 +1,6 @@
+// PR tree-optimization/92644
+// { dg-do compile { target c++14 } }
+// { dg-options "-O2 -fno-early-inlining" }
+
+inline auto foo () { return nullptr; }
+int bar () { return foo () ? 1 : 0; }
diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c
index 9058309..1ae925d 100644
--- a/gcc/tree-ssa-phiopt.c
+++ b/gcc/tree-ssa-phiopt.c
@@ -1381,7 +1381,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
/* Turn EQ/NE of extreme values to order comparisons. */
if ((cmp == NE_EXPR || cmp == EQ_EXPR)
- && TREE_CODE (rhs) == INTEGER_CST)
+ && TREE_CODE (rhs) == INTEGER_CST
+ && INTEGRAL_TYPE_P (TREE_TYPE (rhs)))
{
if (wi::eq_p (wi::to_wide (rhs), wi::min_value (TREE_TYPE (rhs))))
{
@@ -1407,7 +1408,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
larger = rhs;
/* If we have smaller < CST it is equivalent to smaller <= CST-1.
Likewise smaller <= CST is equivalent to smaller < CST+1. */
- if (TREE_CODE (larger) == INTEGER_CST)
+ if (TREE_CODE (larger) == INTEGER_CST
+ && INTEGRAL_TYPE_P (TREE_TYPE (larger)))
{
if (cmp == LT_EXPR)
{
@@ -1435,7 +1437,8 @@ minmax_replacement (basic_block cond_bb, basic_block middle_bb,
larger = gimple_cond_lhs (cond);
/* If we have larger > CST it is equivalent to larger >= CST+1.
Likewise larger >= CST is equivalent to larger > CST-1. */
- if (TREE_CODE (smaller) == INTEGER_CST)
+ if (TREE_CODE (smaller) == INTEGER_CST
+ && INTEGRAL_TYPE_P (TREE_TYPE (smaller)))
{
wi::overflow_type overflow;
if (cmp == GT_EXPR)