From affca1c86b2f7e6e7b4750d7876d94be6de07af4 Mon Sep 17 00:00:00 2001 From: mpolacek Date: Mon, 14 Jan 2019 20:09:10 +0000 Subject: [PATCH] PR c++/88830 - ICE with abstract class. * decl2.c (maybe_emit_vtables): Check CLASSTYPE_LAZY_DESTRUCTOR. Fix formatting. * g++.dg/other/abstract7.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@267924 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl2.c | 5 +++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/other/abstract7.C | 14 ++++++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/other/abstract7.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5d0ef1217bb1..3c1a02f025e2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2019-01-14 Marek Polacek + + PR c++/88830 - ICE with abstract class. + * decl2.c (maybe_emit_vtables): Check CLASSTYPE_LAZY_DESTRUCTOR. + Fix formatting. + 2019-01-14 Tom Honermann Implement P0482R5, char8_t: A type for UTF-8 characters and strings diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 1314ca812ee2..0869fd308247 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2229,8 +2229,9 @@ maybe_emit_vtables (tree ctype) never get generated. */ if (CLASSTYPE_PURE_VIRTUALS (ctype) && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (ctype) - && DECL_DEFAULTED_IN_CLASS_P(CLASSTYPE_DESTRUCTOR(ctype))) - note_vague_linkage_fn (CLASSTYPE_DESTRUCTOR(ctype)); + && !CLASSTYPE_LAZY_DESTRUCTOR (ctype) + && DECL_DEFAULTED_IN_CLASS_P (CLASSTYPE_DESTRUCTOR (ctype))) + note_vague_linkage_fn (CLASSTYPE_DESTRUCTOR (ctype)); /* Since we're writing out the vtable here, also write the debug info. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8c6f9e419baf..d207a5193729 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-14 Marek Polacek + + PR c++/88830 - ICE with abstract class. + * g++.dg/other/abstract7.C: New test. + 2019-01-14 Martin Sebor PR target/88638 diff --git a/gcc/testsuite/g++.dg/other/abstract7.C b/gcc/testsuite/g++.dg/other/abstract7.C new file mode 100644 index 000000000000..95781602c955 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/abstract7.C @@ -0,0 +1,14 @@ +// PR c++/88830 + +struct a { + ~a(); +}; +class b { + virtual void c(int &); +}; +class C : b { + void c(int &); + virtual int d() = 0; + a e; +}; +void C::c(int &) {} -- 2.47.2