From: Jakub Jelinek Date: Fri, 20 Dec 2019 16:58:07 +0000 (+0100) Subject: backport: re PR tree-optimization/92644 (ICE in wide_int_to_tree_1, at tree.c:1530) X-Git-Tag: releases/gcc-9.3.0~299 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3981df84e90b99dc720a76967666b09b193057e8;p=thirdparty%2Fgcc.git backport: re PR tree-optimization/92644 (ICE in wide_int_to_tree_1, at tree.c:1530) Backported from mainline 2019-11-26 Jakub Jelinek 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: r279652 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6803846520c8..1a925cae4e5e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2019-12-20 Jakub Jelinek Backported from mainline + 2019-11-26 Jakub Jelinek + + PR tree-optimization/92644 + * tree-ssa-phiopt.c (minmax_replacement): Add INTEGRAL_TYPE_P check + next to INTEGER_CST checks. + 2019-11-23 Jakub Jelinek PR target/92615 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f3d0452f6e8a..a37e0b3a1f65 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2019-12-20 Jakub Jelinek Backported from mainline + 2019-11-26 Jakub Jelinek + + PR tree-optimization/92644 + * g++.dg/opt/pr92644.C: New test. + 2019-11-23 Jakub Jelinek PR target/92615 diff --git a/gcc/testsuite/g++.dg/opt/pr92644.C b/gcc/testsuite/g++.dg/opt/pr92644.C new file mode 100644 index 000000000000..2f8a86f1fdbb --- /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 8bf09bdf2a0c..19b37b43b8eb 100644 --- a/gcc/tree-ssa-phiopt.c +++ b/gcc/tree-ssa-phiopt.c @@ -1365,7 +1365,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)))) { @@ -1391,7 +1392,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) { @@ -1419,7 +1421,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)