diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/LTO/LTOCodeGenerator.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp index 1980965b169..a7dad55a819 100644 --- a/llvm/lib/LTO/LTOCodeGenerator.cpp +++ b/llvm/lib/LTO/LTOCodeGenerator.cpp @@ -351,7 +351,7 @@ std::unique_ptr<TargetMachine> LTOCodeGenerator::createTargetMachine() { // If a linkonce global is present in the MustPreserveSymbols, we need to make // sure we honor this. To force the compiler to not drop it, we add it to the // "llvm.compiler.used" global. -static void preserveDiscardableGVs( +void LTOCodeGenerator::preserveDiscardableGVs( Module &TheModule, llvm::function_ref<bool(const GlobalValue &)> mustPreserveGV) { SetVector<Constant *> UsedValuesSet; @@ -368,7 +368,17 @@ static void preserveDiscardableGVs( return; if (!mustPreserveGV(GV)) return; - assert(!GV.hasAvailableExternallyLinkage() && !GV.hasInternalLinkage()); + if (GV.hasAvailableExternallyLinkage()) { + emitWarning( + (Twine("Linker asked to preserve available_externally global: '") + + GV.getName() + "'").str()); + return; + } + if (GV.hasInternalLinkage()) { + emitWarning((Twine("Linker asked to preserve internal global: '") + + GV.getName() + "'").str()); + return; + } UsedValuesSet.insert(ConstantExpr::getBitCast(&GV, i8PTy)); }; for (auto &GV : TheModule) @@ -643,3 +653,10 @@ void LTOCodeGenerator::emitError(const std::string &ErrMsg) { else Context.diagnose(LTODiagnosticInfo(ErrMsg)); } + +void LTOCodeGenerator::emitWarning(const std::string &ErrMsg) { + if (DiagHandler) + (*DiagHandler)(LTO_DS_WARNING, ErrMsg.c_str(), DiagContext); + else + Context.diagnose(LTODiagnosticInfo(ErrMsg, DS_Warning)); +} |