Mercurial > projects > ldc
diff gen/toobj.cpp @ 184:f5ca6bbbf1d7 trunk
[svn r200] Fixed: removed use of std.intrinsic.
Fixed: module info could potentially be masked by a previous reference, resulting in linking failure.
author | lindquist |
---|---|
date | Wed, 07 May 2008 22:01:59 +0200 |
parents | db9890b3fb64 |
children | 9d44ec83acd1 |
line wrap: on
line diff
--- a/gen/toobj.cpp Wed May 07 20:22:42 2008 +0200 +++ b/gen/toobj.cpp Wed May 07 22:01:59 2008 +0200 @@ -189,6 +189,7 @@ std::vector<const llvm::Type*> argsTy; const llvm::FunctionType* fnTy = llvm::FunctionType::get(llvm::Type::VoidTy,argsTy,false); + assert(gIR->module->getFunction(name) == NULL); llvm::Function* fn = new llvm::Function(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); fn->setCallingConv(llvm::CallingConv::Fast); @@ -222,6 +223,7 @@ std::vector<const llvm::Type*> argsTy; const llvm::FunctionType* fnTy = llvm::FunctionType::get(llvm::Type::VoidTy,argsTy,false); + assert(gIR->module->getFunction(name) == NULL); llvm::Function* fn = new llvm::Function(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); fn->setCallingConv(llvm::CallingConv::Fast); @@ -255,6 +257,7 @@ std::vector<const llvm::Type*> argsTy; const llvm::FunctionType* fnTy = llvm::FunctionType::get(llvm::Type::VoidTy,argsTy,false); + assert(gIR->module->getFunction(name) == NULL); llvm::Function* fn = new llvm::Function(fnTy, llvm::GlobalValue::InternalLinkage, name, gIR->module); fn->setCallingConv(llvm::CallingConv::Fast); @@ -383,6 +386,7 @@ std::string m_name("_D"); m_name.append(mangle()); m_name.append("9__classesZ"); + assert(gIR->module->getGlobalVariable(m_name) == NULL); llvm::GlobalVariable* m_gvar = new llvm::GlobalVariable(classArrTy, true, llvm::GlobalValue::InternalLinkage, c, m_name, gIR->module); c = llvm::ConstantExpr::getBitCast(m_gvar, getPtrToType(classArrTy->getElementType())); c = DtoConstSlice(DtoConstSize_t(classInits.size()), c); @@ -438,7 +442,10 @@ // declare // flags will be modified at runtime so can't make it constant - llvm::GlobalVariable* gvar = new llvm::GlobalVariable(moduleinfoTy, false, llvm::GlobalValue::ExternalLinkage, constMI, MIname, gIR->module); + + llvm::GlobalVariable* gvar = gIR->module->getGlobalVariable(MIname); + if (!gvar) gvar = new llvm::GlobalVariable(moduleinfoTy, false, llvm::GlobalValue::ExternalLinkage, NULL, MIname, gIR->module); + gvar->setInitializer(constMI); // declare the appending array const llvm::ArrayType* appendArrTy = llvm::ArrayType::get(getPtrToType(llvm::Type::Int8Ty), 1);