mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 15:40:55 +08:00
PR c++/88049 - ICE with undefined destructor and anon namespace.
A type in an anonymous namespace can never be merged with one from another translation unit, so a member of such a type is always its own prevailing decl. * lto-symtab.c (lto_symtab_prevailing_virtual_decl): Return early for a type in an anonymous namespace. From-SVN: r269283
This commit is contained in:
parent
6b7e4afbdc
commit
80f52b400e
@ -1,3 +1,9 @@
|
||||
2019-02-28 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/88049 - ICE with undefined destructor and anon namespace.
|
||||
* lto-symtab.c (lto_symtab_prevailing_virtual_decl): Return early
|
||||
for a type in an anonymous namespace.
|
||||
|
||||
2019-01-09 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
PR other/16615
|
||||
|
@ -1085,8 +1085,12 @@ lto_symtab_prevailing_virtual_decl (tree decl)
|
||||
{
|
||||
if (DECL_ABSTRACT_P (decl))
|
||||
return decl;
|
||||
gcc_checking_assert (!type_in_anonymous_namespace_p (DECL_CONTEXT (decl))
|
||||
&& DECL_ASSEMBLER_NAME_SET_P (decl));
|
||||
|
||||
if (type_in_anonymous_namespace_p (DECL_CONTEXT (decl)))
|
||||
/* There can't be any other declarations. */
|
||||
return decl;
|
||||
|
||||
gcc_checking_assert (DECL_ASSEMBLER_NAME_SET_P (decl));
|
||||
|
||||
symtab_node *n = symtab_node::get_for_asmname
|
||||
(DECL_ASSEMBLER_NAME (decl));
|
||||
|
16
gcc/testsuite/g++.dg/lto/pr88049_0.C
Normal file
16
gcc/testsuite/g++.dg/lto/pr88049_0.C
Normal file
@ -0,0 +1,16 @@
|
||||
// PR c++/88049
|
||||
// { dg-lto-do link }
|
||||
// { dg-lto-options {{ -flto -O2 -w }} }
|
||||
// { dg-extra-ld-options -r }
|
||||
|
||||
template <typename> class a;
|
||||
class b {};
|
||||
template <typename e> a<e> d(char);
|
||||
template <typename> class a : public b {
|
||||
public:
|
||||
virtual ~a();
|
||||
};
|
||||
namespace {
|
||||
class f;
|
||||
b c = d<f>(int());
|
||||
} // namespace
|
Loading…
x
Reference in New Issue
Block a user