diff gen/arrays.cpp @ 174:16e676ae5ab4 trunk

[svn r190] Fixed array concatenation for some broken cases. Added a sanity check for the Dsymbol state set.
author lindquist
date Tue, 06 May 2008 18:36:46 +0200
parents db9890b3fb64
children a074a5ff709c
line wrap: on
line diff
--- a/gen/arrays.cpp	Tue May 06 07:56:03 2008 +0200
+++ b/gen/arrays.cpp	Tue May 06 18:36:46 2008 +0200
@@ -578,20 +578,18 @@
     assert(t1->ty == t2->ty);
 
     DValue* e1 = exp1->toElem(gIR);
-    llvm::Value* a = e1->getRVal();
-
     DValue* e2 = exp2->toElem(gIR);
-    llvm::Value* b = e2->getRVal();
 
     llvm::Value *len1, *len2, *src1, *src2, *res;
-    len1 = gIR->ir->CreateLoad(DtoGEPi(a,0,0,"tmp"),"tmp");
-    len2 = gIR->ir->CreateLoad(DtoGEPi(b,0,0,"tmp"),"tmp");
+
+    len1 = DtoArrayLen(e1);
+    len2 = DtoArrayLen(e2);
     res = gIR->ir->CreateAdd(len1,len2,"tmp");
 
     llvm::Value* mem = DtoNewDynArray(arr, res, DtoDType(t1->next), false);
 
-    src1 = gIR->ir->CreateLoad(DtoGEPi(a,0,1,"tmp"),"tmp");
-    src2 = gIR->ir->CreateLoad(DtoGEPi(b,0,1,"tmp"),"tmp");
+    src1 = DtoArrayPtr(e1);
+    src2 = DtoArrayPtr(e2);
 
     DtoMemCpy(mem,src1,len1);
     mem = gIR->ir->CreateGEP(mem,len1,"tmp");