From d3b57eaf603946e3a23f53bb60e7c1f61ca7cc6a Mon Sep 17 00:00:00 2001 From: Tomas Lindquist Olsen Date: Tue, 6 May 2008 05:25:53 +0200 Subject: [PATCH] [svn r187] Fixed missing definitions of instances of imported struct template declarations. --- gen/structs.cpp | 5 ++++- llvmdc.kdevelop.filelist | 1 + tangotests/templ1.d | 13 +++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 tangotests/templ1.d diff --git a/gen/structs.cpp b/gen/structs.cpp index 25cd5c08..cb25b850 100644 --- a/gen/structs.cpp +++ b/gen/structs.cpp @@ -176,6 +176,9 @@ void DtoResolveStruct(StructDeclaration* sd) Logger::println("DtoResolveStruct(%s): %s", sd->toChars(), sd->loc.toChars()); LOG_SCOPE; + if (sd->prot() == PROTprivate && sd->getModule() != gIR->dmodule) + Logger::println("using a private struct from outside its module"); + TypeStruct* ts = (TypeStruct*)DtoDType(sd->type); IrStruct* irstruct = new IrStruct(ts); @@ -337,7 +340,7 @@ void DtoDeclareStruct(StructDeclaration* sd) gIR->irDsymbol[sd].irStruct->init = initvar; gIR->constInitList.push_back(sd); - if (sd->getModule() == gIR->dmodule) + if (DtoIsTemplateInstance(sd) || sd->getModule() == gIR->dmodule) gIR->defineList.push_back(sd); } diff --git a/llvmdc.kdevelop.filelist b/llvmdc.kdevelop.filelist index 3de01023..561246e8 100644 --- a/llvmdc.kdevelop.filelist +++ b/llvmdc.kdevelop.filelist @@ -772,6 +772,7 @@ tangotests/s.d tangotests/stdout1.d tangotests/stdout2.d tangotests/t.d +tangotests/templ1.d tangotests/vararg1.d tangotests/vararg2.d test diff --git a/tangotests/templ1.d b/tangotests/templ1.d new file mode 100644 index 00000000..d394d99d --- /dev/null +++ b/tangotests/templ1.d @@ -0,0 +1,13 @@ +module tangotests.templ1; + +import Util = tango.text.Util; + +extern(C) int printf(char*, ...); + +void main() +{ + foreach (line; Util.lines("a\nb\nc")) + { + printf("%.*s\n", line.length, line.ptr); + } +}