diff --git a/dmd/template.c b/dmd/template.c index 7893ed6f..fd39101b 100644 --- a/dmd/template.c +++ b/dmd/template.c @@ -2873,7 +2873,10 @@ TemplateInstance::TemplateInstance(Loc loc, Identifier *ident) this->havetempdecl = 0; this->isnested = NULL; this->errors = 0; + + // LDC this->tinst = NULL; + this->tmodule = NULL; } /***************** @@ -2988,6 +2991,7 @@ void TemplateInstance::semantic(Scope *sc) tmodule = tinst->tmodule; else tmodule = sc->module; + //printf("%s in %s\n", toChars(), tmodule->toChars()); #if LOG printf("\tdo semantic\n"); diff --git a/gen/llvmhelpers.cpp b/gen/llvmhelpers.cpp index 0b748eba..70d1e229 100644 --- a/gen/llvmhelpers.cpp +++ b/gen/llvmhelpers.cpp @@ -1557,13 +1557,14 @@ void DtoOverloadedIntrinsicName(TemplateInstance* ti, TemplateDeclaration* td, s bool mustDefineSymbol(Dsymbol* s) { -#if 0 +#if 1 return s->getModule() == gIR->dmodule || DtoIsTemplateInstance(s) != NULL; #else Module* M = DtoIsTemplateInstance(s); // if it's a template instance, check the instantiating module // not the module that defines the template if (M) { + //Logger::println("TINST %s from %s cur %s", s->toPrettyChars(), M->toChars(), gIR->dmodule->toChars()); return M == gIR->dmodule; } return s->getCompilationModule() == gIR->dmodule; @@ -1574,7 +1575,7 @@ bool mustDefineSymbol(Dsymbol* s) bool needsTemplateLinkage(Dsymbol* s) { -#if 0 +#if 1 return DtoIsTemplateInstance(s) != NULL; #else Module* M = DtoIsTemplateInstance(s);