Mercurial > projects > ldc
comparison gen/typinf.c @ 69:2b5a2eaa88be trunk
[svn r73] Identity expression for dynamic array and null was broken.
author | lindquist |
---|---|
date | Sun, 28 Oct 2007 04:23:38 +0100 |
parents | d4a678905d5e |
children | 53d3086b5ad3 |
comparison
equal
deleted
inserted
replaced
68:c4b3f5d2cd9b | 69:2b5a2eaa88be |
---|---|
310 char *name = sd->toPrettyChars(); | 310 char *name = sd->toPrettyChars(); |
311 sinits.push_back(LLVM_DtoConstString(name)); | 311 sinits.push_back(LLVM_DtoConstString(name)); |
312 assert(sinits.back()->getType() == initZ->getOperand(2)->getType()); | 312 assert(sinits.back()->getType() == initZ->getOperand(2)->getType()); |
313 | 313 |
314 // void[] init | 314 // void[] init |
315 //const llvm::PointerType* initpt = llvm::PointerType::get(llvm::Type::Int8Ty); | 315 const llvm::PointerType* initpt = llvm::PointerType::get(llvm::Type::Int8Ty); |
316 //sinits.push_back(LLVM_DtoConstantSlice(LLVM_DtoConstSize_t(0), llvm::ConstantPointerNull::get(initpt))); | 316 if (tinfo->isZeroInit() || !sd->init) // 0 initializer, or the same as the base type |
317 sinits.push_back(initZ->getOperand(3)); | 317 { |
318 sinits.push_back(LLVM_DtoConstSlice(LLVM_DtoConstSize_t(0), llvm::ConstantPointerNull::get(initpt))); | |
319 //sinits.push_back(initZ->getOperand(3)); | |
320 } | |
321 else | |
322 { | |
323 llvm::Constant* ci = LLVM_DtoConstInitializer(sd->basetype, sd->init); | |
324 std::string ciname(sd->mangle()); | |
325 ciname.append("__init"); | |
326 llvm::GlobalVariable* civar = new llvm::GlobalVariable(LLVM_DtoType(sd->basetype),true,llvm::GlobalValue::InternalLinkage,ci,ciname,gIR->module); | |
327 llvm::Constant* cicast = llvm::ConstantExpr::getBitCast(civar, initpt); | |
328 size_t cisize = gTargetData->getTypeSize(LLVM_DtoType(sd->basetype)); | |
329 sinits.push_back(LLVM_DtoConstSlice(LLVM_DtoConstSize_t(cisize), cicast)); | |
330 } | |
318 | 331 |
319 // create the symbol | 332 // create the symbol |
320 llvm::Constant* tiInit = llvm::ConstantStruct::get(stype, sinits); | 333 llvm::Constant* tiInit = llvm::ConstantStruct::get(stype, sinits); |
321 llvm::GlobalVariable* gvar = new llvm::GlobalVariable(stype,true,llvm::GlobalValue::InternalLinkage,tiInit,toChars(),gIR->module); | 334 llvm::GlobalVariable* gvar = new llvm::GlobalVariable(stype,true,llvm::GlobalValue::InternalLinkage,tiInit,toChars(),gIR->module); |
322 | 335 |