diff options
author | Jeff Law <law@redhat.com> | 2017-04-10 13:19:42 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2017-04-10 13:19:42 -0600 |
commit | 9058a2c5c5505f75e40f96f0a86d4e343d7c2743 (patch) | |
tree | d1ab4c2bf223dbce9c630a7c01b3744826ecacad | |
parent | bd8f86429e63734550981cdc07a2908dc85b891b (diff) | |
download | gcc-9058a2c5c5505f75e40f96f0a86d4e343d7c2743.zip gcc-9058a2c5c5505f75e40f96f0a86d4e343d7c2743.tar.gz gcc-9058a2c5c5505f75e40f96f0a86d4e343d7c2743.tar.bz2 |
re PR tree-optimization/80374 (ICE in fold_convert_loc, at fold-const.c:2384)
PR tree-optimization/80374
* tree-ssa-dom.c (derive_equivalences_from_bit_ior): Do not try to
record anything if we can not convert integer_zero_node to the
desired type.
PR tree-optimization/80374
* g++.dg/pr80374.c: New test.
From-SVN: r246819
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr80374.C | 19 | ||||
-rw-r--r-- | gcc/tree-ssa-dom.c | 3 |
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1a22bc0..9f46d13b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-04-10 Jeff Law <law@redhat.com> + + PR tree-optimization/80374 + * tree-ssa-dom.c (derive_equivalences_from_bit_ior): Do not try to + record anything if we can not convert integer_zero_node to the + desired type. + 2017-04-10 Kelvin Nilsen <kelvin@gcc.gnu.org> PR target/80108 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index de2de1c..4787f0af 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-04-10 Jeff Law <law@redhat.com> + + PR tree-optimization/80374 + * g++.dg/pr80374.c: New test. + 2017-04-10 Kelvin Nilsen <kelvin@gcc.gnu.org> PR target/80108 diff --git a/gcc/testsuite/g++.dg/pr80374.C b/gcc/testsuite/g++.dg/pr80374.C new file mode 100644 index 0000000..b02b656 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr80374.C @@ -0,0 +1,19 @@ +void a (const char *, const char *, int, const char *) + __attribute__ ((__noreturn__)); +template <typename b, int> +void +c () try + { + throw; + } +catch (b d) + { + if (d) + a ("", "", 2, __PRETTY_FUNCTION__); + } +main () +{ + using e = decltype (nullptr); + c<volatile e, true> (); +} + diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index d2263bb..d9e5942 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -701,7 +701,8 @@ derive_equivalences_from_bit_ior (tree name, const_and_copies *const_and_copies, int recursion_limit) { - if (recursion_limit == 0) + if (recursion_limit == 0 + || !fold_convertible_p (TREE_TYPE (name), integer_zero_node)) return; if (TREE_CODE (name) == SSA_NAME) |