comparison gen/toobj.cpp @ 163:a8cd9bc1021a trunk

[svn r179] lots and lots of fixes, much more of tango now compiles/works.
author lindquist
date Mon, 05 May 2008 07:36:29 +0200
parents 5c17f81fc1c1
children db9890b3fb64
comparison
equal deleted inserted replaced
162:1856c62af24b 163:a8cd9bc1021a
322 else { // declare 322 else { // declare
323 // create name 323 // create name
324 std::string m_name("_D"); 324 std::string m_name("_D");
325 m_name.append(m->mangle()); 325 m_name.append(m->mangle());
326 m_name.append("8__ModuleZ"); 326 m_name.append("8__ModuleZ");
327 llvm::GlobalVariable* m_gvar = new llvm::GlobalVariable(moduleinfoTy, false, llvm::GlobalValue::ExternalLinkage, NULL, m_name, gIR->module); 327 llvm::GlobalVariable* m_gvar = gIR->module->getGlobalVariable(m_name);
328 if (!m_gvar) m_gvar = new llvm::GlobalVariable(moduleinfoTy, false, llvm::GlobalValue::ExternalLinkage, NULL, m_name, gIR->module);
328 importInits.push_back(m_gvar); 329 importInits.push_back(m_gvar);
329 } 330 }
330 } 331 }
331 // has import array? 332 // has import array?
332 if (!importInits.empty()) 333 if (!importInits.empty())
334 const llvm::ArrayType* importArrTy = llvm::ArrayType::get(getPtrToType(moduleinfoTy), importInits.size()); 335 const llvm::ArrayType* importArrTy = llvm::ArrayType::get(getPtrToType(moduleinfoTy), importInits.size());
335 c = llvm::ConstantArray::get(importArrTy, importInits); 336 c = llvm::ConstantArray::get(importArrTy, importInits);
336 std::string m_name("_D"); 337 std::string m_name("_D");
337 m_name.append(mangle()); 338 m_name.append(mangle());
338 m_name.append("9__importsZ"); 339 m_name.append("9__importsZ");
339 llvm::GlobalVariable* m_gvar = new llvm::GlobalVariable(importArrTy, true, llvm::GlobalValue::InternalLinkage, c, m_name, gIR->module); 340 llvm::GlobalVariable* m_gvar = gIR->module->getGlobalVariable(m_name);
341 if (!m_gvar) m_gvar = new llvm::GlobalVariable(importArrTy, true, llvm::GlobalValue::InternalLinkage, c, m_name, gIR->module);
340 c = llvm::ConstantExpr::getBitCast(m_gvar, getPtrToType(importArrTy->getElementType())); 342 c = llvm::ConstantExpr::getBitCast(m_gvar, getPtrToType(importArrTy->getElementType()));
341 c = DtoConstSlice(DtoConstSize_t(importInits.size()), c); 343 c = DtoConstSlice(DtoConstSize_t(importInits.size()), c);
342 } 344 }
343 else 345 else
344 c = gIR->irDsymbol[moduleinfo].irStruct->constInit->getOperand(3); 346 c = gIR->irDsymbol[moduleinfo].irStruct->constInit->getOperand(3);
537 std::string _name(mangle()); 539 std::string _name(mangle());
538 540
539 llvm::GlobalVariable* gvar = new llvm::GlobalVariable(_type,_isconst,_linkage,NULL,_name,gIR->module); 541 llvm::GlobalVariable* gvar = new llvm::GlobalVariable(_type,_isconst,_linkage,NULL,_name,gIR->module);
540 gIR->irDsymbol[this].irGlobal->value = gvar; 542 gIR->irDsymbol[this].irGlobal->value = gvar;
541 543
544 Logger::cout() << *gvar << '\n';
545
542 if (static_local) 546 if (static_local)
543 DtoConstInitGlobal(this); 547 DtoConstInitGlobal(this);
544 else 548 else
545 gIR->constInitList.push_back(this); 549 gIR->constInitList.push_back(this);
546 } 550 }