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