comparison 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
comparison
equal deleted inserted replaced
173:db9890b3fb64 174:16e676ae5ab4
576 576
577 assert(t1->ty == Tarray); 577 assert(t1->ty == Tarray);
578 assert(t1->ty == t2->ty); 578 assert(t1->ty == t2->ty);
579 579
580 DValue* e1 = exp1->toElem(gIR); 580 DValue* e1 = exp1->toElem(gIR);
581 llvm::Value* a = e1->getRVal();
582
583 DValue* e2 = exp2->toElem(gIR); 581 DValue* e2 = exp2->toElem(gIR);
584 llvm::Value* b = e2->getRVal();
585 582
586 llvm::Value *len1, *len2, *src1, *src2, *res; 583 llvm::Value *len1, *len2, *src1, *src2, *res;
587 len1 = gIR->ir->CreateLoad(DtoGEPi(a,0,0,"tmp"),"tmp"); 584
588 len2 = gIR->ir->CreateLoad(DtoGEPi(b,0,0,"tmp"),"tmp"); 585 len1 = DtoArrayLen(e1);
586 len2 = DtoArrayLen(e2);
589 res = gIR->ir->CreateAdd(len1,len2,"tmp"); 587 res = gIR->ir->CreateAdd(len1,len2,"tmp");
590 588
591 llvm::Value* mem = DtoNewDynArray(arr, res, DtoDType(t1->next), false); 589 llvm::Value* mem = DtoNewDynArray(arr, res, DtoDType(t1->next), false);
592 590
593 src1 = gIR->ir->CreateLoad(DtoGEPi(a,0,1,"tmp"),"tmp"); 591 src1 = DtoArrayPtr(e1);
594 src2 = gIR->ir->CreateLoad(DtoGEPi(b,0,1,"tmp"),"tmp"); 592 src2 = DtoArrayPtr(e2);
595 593
596 DtoMemCpy(mem,src1,len1); 594 DtoMemCpy(mem,src1,len1);
597 mem = gIR->ir->CreateGEP(mem,len1,"tmp"); 595 mem = gIR->ir->CreateGEP(mem,len1,"tmp");
598 DtoMemCpy(mem,src2,len2); 596 DtoMemCpy(mem,src2,len2);
599 } 597 }