From 6d6af792827fa779531662366b6dadad477a84dc Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Fri, 7 Feb 2014 07:01:36 +0100 Subject: [PATCH] re PR ipa/59918 (ICE in record_target_from_binfo, at ipa-devirt.c:693) PR ipa/59918 * ipa-devirt.c (record_target_from_binfo): Remove overactive sanity check. * g++.dg/torture/pr59918.C: New testcase. From-SVN: r207592 --- gcc/ChangeLog | 5 +++++ gcc/ipa-devirt.c | 5 +---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/torture/pr59918.C | 18 ++++++++++++++++++ 4 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/torture/pr59918.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 43e9d9cd6fc..0a0674f4738 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-02-06 Jan Hubicka + + PR ipa/59918 + * ipa-devirt.c (record_target_from_binfo): Remove overactive sanity check. + 2014-02-06 Jan Hubicka PR ipa/59469 diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index c110a982209..3341a5a9fc0 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -689,10 +689,7 @@ record_target_from_binfo (vec &nodes, we may not have its associated vtable. This is not a problem, since we will walk it on the other path. */ if (!type_binfo) - { - gcc_assert (BINFO_VIRTUAL_P (binfo)); - return; - } + return; tree inner_binfo = get_binfo_at_offset (type_binfo, offset, otr_type); /* For types in anonymous namespace first check if the respective vtable diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2cac8d2cf33..45f215e239c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-02-06 Jan Hubicka + + PR ipa/59918 + * g++.dg/torture/pr59918.C: New testcase. + 2014-02-06 Jakub Jelinek PR target/59575 diff --git a/gcc/testsuite/g++.dg/torture/pr59918.C b/gcc/testsuite/g++.dg/torture/pr59918.C new file mode 100644 index 00000000000..b30d33eb369 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr59918.C @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +struct E { + ~E(); + virtual void f() const; +}; +struct B : E {}; +struct G : virtual B {}; +struct A { + virtual ~A(); +}; +struct J : E { + void f() const { + E *p = 0; + p->f(); + } +}; +J h; +struct I : A, G, virtual B {}; -- 2.30.2