diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2019-03-20 23:52:48 +0000 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gcc.gnu.org> | 2019-03-20 23:52:48 +0000 |
commit | 9dddefefdf407376ed3a0bba09a14f65b194898d (patch) | |
tree | 1c5d4ec04a8021ff8e31befda84fa58201e0fb9b /gcc/d/d-codegen.cc | |
parent | 5d2df818b7752021425581455aca08f3fd0902b7 (diff) | |
download | gcc-9dddefefdf407376ed3a0bba09a14f65b194898d.zip gcc-9dddefefdf407376ed3a0bba09a14f65b194898d.tar.gz gcc-9dddefefdf407376ed3a0bba09a14f65b194898d.tar.bz2 |
d: Fix ICE force_type_die, at dwarf2out.c using nested types
In functions whose return type is instantiated from a nested template,
make sure that all members of the instance are emitted before finishing
the outer function, otherwise they will be removed during the
prune_unused_types pass.
gcc/d/ChangeLog:
2019-03-21 Iain Buclaw <ibuclaw@gdcproject.org>
PR d/89017
* d-codegen.cc (d_decl_context): Skip over template instances when
finding the context.
* decl.cc (DeclVisitor::visit(TemplateDeclaration)): New override.
(build_type_decl): Include parameters in name of template types.
gcc/testsuite/ChangeLog:
2019-03-21 Iain Buclaw <ibuclaw@gdcproject.org>
PR d/89017
* gdc.dg/pr89017.d: New test.
From-SVN: r269828
Diffstat (limited to 'gcc/d/d-codegen.cc')
-rw-r--r-- | gcc/d/d-codegen.cc | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/gcc/d/d-codegen.cc b/gcc/d/d-codegen.cc index e8233b4..2692910 100644 --- a/gcc/d/d-codegen.cc +++ b/gcc/d/d-codegen.cc @@ -67,7 +67,7 @@ d_decl_context (Dsymbol *dsym) Dsymbol *parent = dsym; Declaration *decl = dsym->isDeclaration (); - while ((parent = parent->toParent ())) + while ((parent = parent->toParent2 ())) { /* We've reached the top-level module namespace. Set DECL_CONTEXT as the NAMESPACE_DECL of the enclosing module, @@ -101,11 +101,6 @@ d_decl_context (Dsymbol *dsym) return context; } - - /* Instantiated types are given the context of their template. */ - TemplateInstance *ti = parent->isTemplateInstance (); - if (ti != NULL && decl == NULL) - parent = ti->tempdecl; } return NULL_TREE; |