From 0bddb2568f82eac46d96c5b0915f21ea3ff8ca9a Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Sun, 22 Jun 2008 21:36:07 +0200 Subject: [PATCH] [svn r315] Build full const initializer for static arrays in DtoConstInitializer if necessary. --- gen/llvmhelpers.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/gen/llvmhelpers.cpp b/gen/llvmhelpers.cpp index a8b3b196..b994c255 100644 --- a/gen/llvmhelpers.cpp +++ b/gen/llvmhelpers.cpp @@ -969,7 +969,22 @@ LLConstant* DtoConstInitializer(Type* type, Initializer* init) if (!init) { Logger::println("const default initializer for %s", type->toChars()); - _init = type->defaultInit()->toConstElem(gIR); + + if(type->ty == Tsarray) + { + Logger::println("type is a static array, building constant array initializer"); + TypeSArray* arrtype = (TypeSArray*)type; + Type* elemtype = type->next; + + integer_t arraydim; + arraydim = arrtype->dim->toInteger(); + + std::vector inits(arraydim, elemtype->defaultInit()->toConstElem(gIR)); + const LLArrayType* arrty = LLArrayType::get(DtoType(elemtype),arraydim); + _init = LLConstantArray::get(arrty, inits); + } + else + _init = type->defaultInit()->toConstElem(gIR); } else if (ExpInitializer* ex = init->isExpInitializer()) {