comparison gen/arrays.cpp @ 399:0e6b4d65d3f8

Give error messages for invalid casts. This required passing Loc information to certain functions. Fixes nocompile/b/bug_cgcs_354_A/B.
author Christian Kamm <kamm incasoftware de>
date Sat, 26 Jul 2008 17:19:16 +0200
parents 811f82dfddbd
children e6e972c5cc17
comparison
equal deleted inserted replaced
398:811f82dfddbd 399:0e6b4d65d3f8
104 } 104 }
105 } 105 }
106 106
107 ////////////////////////////////////////////////////////////////////////////////////////// 107 //////////////////////////////////////////////////////////////////////////////////////////
108 108
109 void DtoArrayInit(DValue* array, DValue* value) 109 void DtoArrayInit(Loc& loc, DValue* array, DValue* value)
110 { 110 {
111 Logger::println("DtoArrayInit"); 111 Logger::println("DtoArrayInit");
112 LOG_SCOPE; 112 LOG_SCOPE;
113 113
114 LLValue* dim = DtoArrayLen(array); 114 LLValue* dim = DtoArrayLen(array);
118 // give slices and complex values storage (and thus an address to pass) 118 // give slices and complex values storage (and thus an address to pass)
119 if (value->isSlice() || value->isComplex()) 119 if (value->isSlice() || value->isComplex())
120 { 120 {
121 val = new llvm::AllocaInst(DtoType(value->getType()), ".tmpparam", gIR->topallocapoint()); 121 val = new llvm::AllocaInst(DtoType(value->getType()), ".tmpparam", gIR->topallocapoint());
122 DVarValue lval(value->getType(), val, true); 122 DVarValue lval(value->getType(), val, true);
123 DtoAssign(&lval, value); 123 DtoAssign(loc, &lval, value);
124 } 124 }
125 else 125 else
126 { 126 {
127 val = value->getRVal(); 127 val = value->getRVal();
128 } 128 }
529 DValue* dptr = new DVarValue(exp->type, ptr, true); 529 DValue* dptr = new DVarValue(exp->type, ptr, true);
530 530
531 DValue* e = exp->toElem(gIR); 531 DValue* e = exp->toElem(gIR);
532 532
533 if (!e->inPlace()) 533 if (!e->inPlace())
534 DtoAssign(dptr, e); 534 DtoAssign(exp->loc, dptr, e);
535 535
536 return slice; 536 return slice;
537 } 537 }
538 538
539 ////////////////////////////////////////////////////////////////////////////////////////// 539 //////////////////////////////////////////////////////////////////////////////////////////
631 DValue* lenval = new DImValue(Type::tsize_t, res); 631 DValue* lenval = new DImValue(Type::tsize_t, res);
632 DSliceValue* slice = DtoNewDynArray(type, lenval, false); 632 DSliceValue* slice = DtoNewDynArray(type, lenval, false);
633 LLValue* mem = slice->ptr; 633 LLValue* mem = slice->ptr;
634 634
635 DVarValue* memval = new DVarValue(e1->getType(), mem, true); 635 DVarValue* memval = new DVarValue(e1->getType(), mem, true);
636 DtoAssign(memval, e1); 636 DtoAssign(exp1->loc, memval, e1);
637 637
638 src1 = DtoArrayPtr(e2); 638 src1 = DtoArrayPtr(e2);
639 639
640 mem = gIR->ir->CreateGEP(mem,DtoConstSize_t(1),"tmp"); 640 mem = gIR->ir->CreateGEP(mem,DtoConstSize_t(1),"tmp");
641 641
662 LLValue* bytelen = gIR->ir->CreateMul(len1, elemSize, "tmp"); 662 LLValue* bytelen = gIR->ir->CreateMul(len1, elemSize, "tmp");
663 DtoMemCpy(mem,src1,bytelen); 663 DtoMemCpy(mem,src1,bytelen);
664 664
665 mem = gIR->ir->CreateGEP(mem,len1,"tmp"); 665 mem = gIR->ir->CreateGEP(mem,len1,"tmp");
666 DVarValue* memval = new DVarValue(e2->getType(), mem, true); 666 DVarValue* memval = new DVarValue(e2->getType(), mem, true);
667 DtoAssign(memval, e2); 667 DtoAssign(exp1->loc, memval, e2);
668 668
669 return slice; 669 return slice;
670 } 670 }
671 } 671 }
672 672