changeset 212:4c2689d57ba4 trunk

[svn r228] Fixed: when new'ing basic types, the storage was not default initialized. Fixed: the tango/lib/compiler/llvmdc/llvmdc.mak makefile was a bit incorrect. Changed: the basic gc is now the default. Changed: renamed a few temporary names in the LLVM IR output.
author lindquist
date Tue, 27 May 2008 22:14:24 +0200
parents f66219e0d530
children 7816aafeea3c
files gen/toir.cpp llvmdc.kdevelop.filelist tango/lib/compiler/llvmdc/lifetime.d tango/lib/compiler/llvmdc/llvmdc.mak tango/lib/llvmdc-posix.mak tangotests/mem6.d
diffstat 6 files changed, 36 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/gen/toir.cpp	Tue May 27 19:53:29 2008 +0200
+++ b/gen/toir.cpp	Tue May 27 22:14:24 2008 +0200
@@ -444,7 +444,7 @@
 
     llvm::GlobalValue::LinkageTypes _linkage = llvm::GlobalValue::InternalLinkage;//WeakLinkage;
     Logger::cout() << "type: " << *at << "\ninit: " << *_init << '\n';
-    llvm::GlobalVariable* gvar = new llvm::GlobalVariable(at,true,_linkage,_init,"stringliteral",gIR->module);
+    llvm::GlobalVariable* gvar = new llvm::GlobalVariable(at,true,_linkage,_init,".stringliteral",gIR->module);
 
     llvm::ConstantInt* zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
     llvm::Constant* idxs[2] = { zero, zero };
@@ -534,7 +534,7 @@
     }
 
     llvm::GlobalValue::LinkageTypes _linkage = llvm::GlobalValue::InternalLinkage;//WeakLinkage;
-    llvm::GlobalVariable* gvar = new llvm::GlobalVariable(_init->getType(),true,_linkage,_init,"stringliteral",gIR->module);
+    llvm::GlobalVariable* gvar = new llvm::GlobalVariable(_init->getType(),true,_linkage,_init,".stringliteral",gIR->module);
 
     llvm::ConstantInt* zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
     llvm::Constant* idxs[2] = { zero, zero };
@@ -1979,8 +1979,14 @@
     {
         // allocate
         llvm::Value* mem = DtoNew(newtype);
-        // BUG: default initialize
-        // return
+        DVarValue tmpvar(newtype, mem, true);
+
+        // default initialize
+        Expression* exp = newtype->defaultInit(loc);
+        DValue* iv = exp->toElem(gIR);
+        DtoAssign(&tmpvar, iv);
+
+        // return as pointer-to
         return new DImValue(type, mem, false);
     }
 
@@ -2082,7 +2088,7 @@
     // create basic blocks
     llvm::BasicBlock* oldend = p->scopeend();
     llvm::BasicBlock* assertbb = llvm::BasicBlock::Create("assert", p->topfunc(), oldend);
-    llvm::BasicBlock* endbb = llvm::BasicBlock::Create("endassert", p->topfunc(), oldend);
+    llvm::BasicBlock* endbb = llvm::BasicBlock::Create("noassert", p->topfunc(), oldend);
 
     // test condition
     llvm::Value* condval = cond->getRVal();
--- a/llvmdc.kdevelop.filelist	Tue May 27 19:53:29 2008 +0200
+++ b/llvmdc.kdevelop.filelist	Tue May 27 22:14:24 2008 +0200
@@ -764,6 +764,7 @@
 tangotests/mem3.d
 tangotests/mem4.d
 tangotests/mem5.d
+tangotests/mem6.d
 tangotests/n.d
 tangotests/o.d
 tangotests/r.d
--- a/tango/lib/compiler/llvmdc/lifetime.d	Tue May 27 19:53:29 2008 +0200
+++ b/tango/lib/compiler/llvmdc/lifetime.d	Tue May 27 22:14:24 2008 +0200
@@ -206,7 +206,7 @@
     void* p;
     auto size = ti.next.tsize();                // array element size
 
-    debug(PRINTF) printf("_d_newarrayT(length = x%x, size = %d)\n", length, size);
+    debug(PRINTF) printf("_d_newarrayT(length = %u, size = %d)\n", length, size);
     if (length == 0 || size == 0)
         return null;
 
--- a/tango/lib/compiler/llvmdc/llvmdc.mak	Tue May 27 19:53:29 2008 +0200
+++ b/tango/lib/compiler/llvmdc/llvmdc.mak	Tue May 27 22:14:24 2008 +0200
@@ -10,11 +10,11 @@
 #	make clean
 #		Delete unneeded files created by build process
 
-LIB_TARGET=libtango-rt-llvmdc.a
-LIB_MASK=libtango-rt-llvmdc*.a
+LIB_TARGET=libtango-base-llvmdc.a
+LIB_MASK=libtango-base-llvmdc*.a
 
-LIB_TARGET_C=libtango-rt-c-llvmdc.a
-LIB_MASK_C=libtango-rt-c-llvmdc*.a
+LIB_TARGET_C=libtango-base-c-llvmdc.a
+LIB_MASK_C=libtango-base-c-llvmdc*.a
 
 CP=cp -f
 RM=rm -f
--- a/tango/lib/llvmdc-posix.mak	Tue May 27 19:53:29 2008 +0200
+++ b/tango/lib/llvmdc-posix.mak	Tue May 27 22:14:24 2008 +0200
@@ -17,8 +17,8 @@
 
 DIR_CC=./common/tango
 DIR_RT=./compiler/llvmdc
-#DIR_GC=./gc/basic
-DIR_GC=./gc/stub
+DIR_GC=./gc/basic
+#DIR_GC=./gc/stub
 
 CP=cp -f
 RM=rm -f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tangotests/mem6.d	Tue May 27 22:14:24 2008 +0200
@@ -0,0 +1,17 @@
+module tangotests.mem6;
+
+extern(C) int printf(char*,...);
+
+int main(){
+        int[] index;
+        char[] value;
+
+        foreach(int i, char c; "_\U00012345-"){
+                printf("str[%d] = %d\n", i , cast(int)c);
+                index ~= i;
+                //value ~= c;
+        }
+        printf("done\n");
+
+        return 0;
+}