Mercurial > projects > ldc
comparison gen/toir.cpp @ 178:8873b7f1457e trunk
[svn r194] Fixed: string literal constant expressions with static array type was broken.
author | lindquist |
---|---|
date | Wed, 07 May 2008 05:02:48 +0200 |
parents | cea8dcfa76df |
children | 3cdf4b0c75a1 |
comparison
equal
deleted
inserted
replaced
177:cea8dcfa76df | 178:8873b7f1457e |
---|---|
526 _init = llvm::ConstantArray::get(at,vals); | 526 _init = llvm::ConstantArray::get(at,vals); |
527 } | 527 } |
528 else | 528 else |
529 assert(0); | 529 assert(0); |
530 | 530 |
531 if (t->ty == Tsarray) | |
532 { | |
533 return _init; | |
534 } | |
535 | |
531 llvm::GlobalValue::LinkageTypes _linkage = llvm::GlobalValue::InternalLinkage;//WeakLinkage; | 536 llvm::GlobalValue::LinkageTypes _linkage = llvm::GlobalValue::InternalLinkage;//WeakLinkage; |
532 llvm::GlobalVariable* gvar = new llvm::GlobalVariable(_init->getType(),true,_linkage,_init,"stringliteral",gIR->module); | 537 llvm::GlobalVariable* gvar = new llvm::GlobalVariable(_init->getType(),true,_linkage,_init,"stringliteral",gIR->module); |
533 | 538 |
534 llvm::ConstantInt* zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); | 539 llvm::ConstantInt* zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); |
535 llvm::Constant* idxs[2] = { zero, zero }; | 540 llvm::Constant* idxs[2] = { zero, zero }; |
536 llvm::Constant* arrptr = llvm::ConstantExpr::getGetElementPtr(gvar,idxs,2); | 541 llvm::Constant* arrptr = llvm::ConstantExpr::getGetElementPtr(gvar,idxs,2); |
537 | 542 |
538 if (t->ty == Tpointer) { | 543 if (t->ty == Tpointer) { |
539 return arrptr; | 544 return arrptr; |
540 } | 545 } |
541 | 546 else if (t->ty == Tarray) { |
542 if (t->ty == Tarray) { | |
543 llvm::Constant* clen = llvm::ConstantInt::get(DtoSize_t(),len,false); | 547 llvm::Constant* clen = llvm::ConstantInt::get(DtoSize_t(),len,false); |
544 return DtoConstSlice(clen, arrptr); | 548 return DtoConstSlice(clen, arrptr); |
545 } | 549 } |
546 | 550 |
547 assert(0); | 551 assert(0); |