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);