mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-04-29 14:40:40 +03:00
Implement previously inoperative pragma(LDC_no_moduleinfo).
GitHub: Fixes #571.
This commit is contained in:
parent
1f45eadbfe
commit
04570399d4
5 changed files with 26 additions and 20 deletions
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) }
|
||||
|
|
|
@ -28,7 +28,6 @@ enum Pragma
|
|||
LLVMglobal_crt_ctor,
|
||||
LLVMglobal_crt_dtor,
|
||||
LLVMno_typeinfo,
|
||||
LLVMno_moduleinfo,
|
||||
LLVMalloca,
|
||||
LLVMva_start,
|
||||
LLVMva_copy,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue