changeset 294:94435b0ab2dd trunk

[svn r315] Build full const initializer for static arrays in DtoConstInitializer if necessary.
author ChristianK
date Sun, 22 Jun 2008 21:36:07 +0200
parents ebfa488f4abc
children 895e1b50cf2a
files gen/llvmhelpers.cpp
diffstat 1 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/gen/llvmhelpers.cpp	Sun Jun 22 15:21:34 2008 +0200
+++ b/gen/llvmhelpers.cpp	Sun Jun 22 21:36:07 2008 +0200
@@ -969,7 +969,22 @@
     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<LLConstant*> 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())
     {