aboutsummaryrefslogtreecommitdiff
path: root/gcc/d/d-codegen.cc
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2019-03-20 23:52:48 +0000
committerIain Buclaw <ibuclaw@gcc.gnu.org>2019-03-20 23:52:48 +0000
commit9dddefefdf407376ed3a0bba09a14f65b194898d (patch)
tree1c5d4ec04a8021ff8e31befda84fa58201e0fb9b /gcc/d/d-codegen.cc
parent5d2df818b7752021425581455aca08f3fd0902b7 (diff)
downloadgcc-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.cc7
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;