Skip to content

Instantly share code, notes, and snippets.

@jpf91
Created January 13, 2013 15:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jpf91/4524721 to your computer and use it in GitHub Desktop.
Save jpf91/4524721 to your computer and use it in GitHub Desktop.
diff --git a/gcc/d/d-glue.cc b/gcc/d/d-glue.cc
index 71c85e7..14d7000 100644
--- a/gcc/d/d-glue.cc
+++ b/gcc/d/d-glue.cc
@@ -2675,6 +2675,20 @@ FuncDeclaration::toObjFile (int)
fbody->toIR (irs);
+ // Find all template instances that are nested in this scope and emit
+ Module * module = getModule();
+ if (module->members)
+ {
+ for (size_t i = 0; i < module->members->dim; i++)
+ {
+ Dsymbol *dsym = (*module->members)[i];
+ if(dsym->isTemplateInstance() && dsym->parent == this)
+ {
+ dsym->toObjFile (false); //What should multiobj be?
+ }
+ }
+ }
+
// Process all deferred nested functions.
for (size_t i = 0; i < this_sym->deferredNestedFuncs.dim; ++i)
{
@@ -2820,10 +2835,23 @@ Module::genobjfile (int multiobj)
for (size_t i = 0; i < members->dim; i++)
{
Dsymbol *dsym = (*members)[i];
- dsym->toObjFile (multiobj);
+ if(!dsym->isTemplateInstance())
+ {
+ dsym->toObjFile (multiobj);
+ }
}
- }
+ //Defer template instances
+ for (size_t i = 0; i < members->dim; i++)
+ {
+ Dsymbol *dsym = (*members)[i];
+ if(dsym->isTemplateInstance())
+ {
+ dsym->toObjFile (multiobj);
+ }
+ }
+ }
+
// Always generate module info.
if (1 || needModuleInfo())
{
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment