comparison gen/toobj.c @ 64:b688ad419f8c trunk

[svn r68] Added support for multi-dimensional static arrays. Several bugfixes to array support.
author lindquist
date Thu, 25 Oct 2007 12:09:13 +0200
parents 2c39b5292cf3
children f918f3e2e99e
comparison
equal deleted inserted replaced
63:2c39b5292cf3 64:b688ad419f8c
33 33
34 #include "gen/irstate.h" 34 #include "gen/irstate.h"
35 #include "gen/elem.h" 35 #include "gen/elem.h"
36 #include "gen/logger.h" 36 #include "gen/logger.h"
37 #include "gen/tollvm.h" 37 #include "gen/tollvm.h"
38 #include "gen/arrays.h"
38 39
39 ////////////////////////////////////////////////////////////////////////////////////////// 40 //////////////////////////////////////////////////////////////////////////////////////////
40 41
41 void 42 void
42 Module::genobjfile() 43 Module::genobjfile()
544 _init = ts->sym->llvmInitZ; 545 _init = ts->sym->llvmInitZ;
545 } 546 }
546 // array single value init 547 // array single value init
547 else if (llvm::isa<llvm::ArrayType>(_type)) 548 else if (llvm::isa<llvm::ArrayType>(_type))
548 { 549 {
549 const llvm::ArrayType* at = llvm::cast<llvm::ArrayType>(_type); 550 _init = LLVM_DtoConstantStaticArray(_type, _init);
550 if (at->getElementType() == _init->getType()) {
551 std::vector<llvm::Constant*> initvals;
552 initvals.resize(at->getNumElements(), _init);
553 _init = llvm::ConstantArray::get(at, initvals);
554 }
555 else {
556 assert(0);
557 }
558 } 551 }
559 else { 552 else {
560 Logger::cout() << "Unexpected initializer type: " << *_type << '\n'; 553 Logger::cout() << "Unexpected initializer type: " << *_type << '\n';
561 //assert(0); 554 //assert(0);
562 } 555 }
563 } 556 }
564 557
558 Logger::cout() << "final init = " << *_init << '\n';
565 gvar->setInitializer(_init); 559 gvar->setInitializer(_init);
566 } 560 }
567 561
568 llvmDModule = gIR->dmodule; 562 llvmDModule = gIR->dmodule;
569 563