Implement previously inoperative pragma(LDC_no_moduleinfo).

GitHub: Fixes #571.
This commit is contained in:
David Nadlinger 2014-07-10 01:08:29 +02:00
parent 1f45eadbfe
commit 04570399d4
5 changed files with 26 additions and 20 deletions

View file

@ -136,6 +136,7 @@ Module::Module(const char *filename, Identifier *ident, int doDocComment, int do
#if IN_LLVM
// LDC
llvmForceLogging = false;
noModuleInfo = false;
moduleInfoVar = NULL;
this->doDocComment = doDocComment;
this->doHdrGen = doHdrGen;

View file

@ -207,6 +207,7 @@ public:
llvm::GlobalVariable* moduleInfoSymbol();
bool llvmForceLogging;
bool noModuleInfo; /// Do not emit any module metadata.
llvm::GlobalVariable* moduleInfoVar;
// array ops emitted in this module already

View file

@ -626,27 +626,31 @@ llvm::Module* Module::genLLVMModule(llvm::LLVMContext& context)
// finalize debug info
gIR->DBuilder.EmitModuleEnd();
// generate ModuleInfo
genmoduleinfo();
// Skip emission of all the additional module metadata if requested by the user.
if (!noModuleInfo)
{
// generate ModuleInfo
genmoduleinfo();
build_llvm_used_array(&ir);
build_llvm_used_array(&ir);
#if LDC_LLVM_VER >= 303
// Add the linker options metadata flag.
ir.module->addModuleFlag(llvm::Module::AppendUnique, "Linker Options",
llvm::MDNode::get(ir.context(), ir.LinkerMetadataArgs));
#endif
#if LDC_LLVM_VER >= 303
// Add the linker options metadata flag.
ir.module->addModuleFlag(llvm::Module::AppendUnique, "Linker Options",
llvm::MDNode::get(ir.context(), ir.LinkerMetadataArgs));
#endif
#if LDC_LLVM_VER >= 304
// Emit ldc version as llvm.ident metadata.
llvm::NamedMDNode *IdentMetadata = ir.module->getOrInsertNamedMetadata("llvm.ident");
std::string Version("ldc version ");
Version.append(global.ldc_version);
llvm::Value *IdentNode[] = {
llvm::MDString::get(ir.context(), Version)
};
IdentMetadata->addOperand(llvm::MDNode::get(ir.context(), IdentNode));
#endif
#if LDC_LLVM_VER >= 304
// Emit ldc version as llvm.ident metadata.
llvm::NamedMDNode *IdentMetadata = ir.module->getOrInsertNamedMetadata("llvm.ident");
std::string Version("ldc version ");
Version.append(global.ldc_version);
llvm::Value *IdentNode[] = {
llvm::MDString::get(ir.context(), Version)
};
IdentMetadata->addOperand(llvm::MDNode::get(ir.context(), IdentNode));
#endif
}
// verify the llvm
verifyModule(*ir.module);

View file

@ -140,7 +140,8 @@ Pragma DtoGetPragma(Scope *sc, PragmaDeclaration *decl, std::string &arg1str)
error(Loc(), "takes no parameters");
fatal();
}
return LLVMno_moduleinfo;
sc->module->noModuleInfo = true;
return LLVMignore;
}
// pragma(LDC_alloca) { funcdecl(s) }

View file

@ -28,7 +28,6 @@ enum Pragma
LLVMglobal_crt_ctor,
LLVMglobal_crt_dtor,
LLVMno_typeinfo,
LLVMno_moduleinfo,
LLVMalloca,
LLVMva_start,
LLVMva_copy,