diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2016-05-27 05:21:35 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2016-05-27 05:21:35 +0000 |
commit | 1eaa97f43912b6d4571e1397bbed9a72018e3dc4 (patch) | |
tree | e1d104c37f85d7db5a654131198670b428e8fe18 /llvm/lib/Linker/LinkModules.cpp | |
parent | 8ef190c7b0d2ebfb6ba8e7249179c4c26143d69e (diff) | |
download | bcm5719-llvm-1eaa97f43912b6d4571e1397bbed9a72018e3dc4.tar.gz bcm5719-llvm-1eaa97f43912b6d4571e1397bbed9a72018e3dc4.zip |
Linker: teach the IR mover to return llvm::Error.
This will be needed in order to consistently return an Error
to clients of the API being developed in D20268.
Differential Revision: http://reviews.llvm.org/D20550
llvm-svn: 270967
Diffstat (limited to 'llvm/lib/Linker/LinkModules.cpp')
-rw-r--r-- | llvm/lib/Linker/LinkModules.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index 5b713fe29fb..14a25612259 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -18,6 +18,7 @@ #include "llvm/IR/DiagnosticPrinter.h" #include "llvm/IR/LLVMContext.h" #include "llvm/Linker/Linker.h" +#include "llvm/Support/Error.h" #include "llvm/Transforms/Utils/FunctionImportUtils.h" using namespace llvm; @@ -574,11 +575,21 @@ bool ModuleLinker::run() { Internalize.insert(GV->getName()); } - if (Mover.move(std::move(SrcM), ValuesToLink.getArrayRef(), - [this](GlobalValue &GV, IRMover::ValueAdder Add) { - addLazyFor(GV, Add); - })) + // FIXME: Propagate Errors through to the caller instead of emitting + // diagnostics. + bool HasErrors = false; + if (Error E = Mover.move(std::move(SrcM), ValuesToLink.getArrayRef(), + [this](GlobalValue &GV, IRMover::ValueAdder Add) { + addLazyFor(GV, Add); + })) { + handleAllErrors(std::move(E), [&](ErrorInfoBase &EIB) { + DstM.getContext().diagnose(LinkDiagnosticInfo(DS_Error, EIB.message())); + HasErrors = true; + }); + } + if (HasErrors) return true; + for (auto &P : Internalize) { GlobalValue *GV = DstM.getNamedValue(P.first()); GV->setLinkage(GlobalValue::InternalLinkage); |