diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-10-25 04:06:10 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-10-25 04:06:10 +0000 |
commit | 72478e59c7dfb01870a8f6b5ae6c7e1fb18719c3 (patch) | |
tree | 70c6240aa1202a26a1f6a312833e645c295dd791 /tools/llvm-link | |
parent | 1d1d705a95e4a93137382e950ea1d34767d0b9f0 (diff) |
Update the error handling of lib/Linker.
Instead of passing a std::string&, use the new diagnostic infrastructure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220608 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-link')
-rw-r--r-- | tools/llvm-link/llvm-link.cpp | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/tools/llvm-link/llvm-link.cpp b/tools/llvm-link/llvm-link.cpp index 7c2894baa1b..c4a4e49ba74 100644 --- a/tools/llvm-link/llvm-link.cpp +++ b/tools/llvm-link/llvm-link.cpp @@ -14,6 +14,8 @@ #include "llvm/Linker/Linker.h" #include "llvm/Bitcode/ReaderWriter.h" +#include "llvm/IR/DiagnosticInfo.h" +#include "llvm/IR/DiagnosticPrinter.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/IR/Verifier.h" @@ -69,6 +71,25 @@ loadFile(const char *argv0, const std::string &FN, LLVMContext &Context) { return Result; } +static void diagnosticHandler(const DiagnosticInfo &DI, void *Context) { + unsigned Severity = DI.getSeverity(); + switch (Severity) { + case DS_Error: + errs() << "ERROR: "; + case DS_Warning: + if (SuppressWarnings) + return; + errs() << "WARNING: "; + break; + case DS_Remark: + case DS_Note: + llvm_unreachable("Only expecting warnings and errors"); + } + + DiagnosticPrinterRawOStream DP(errs()); + DI.print(DP); +} + int main(int argc, char **argv) { // Print a stack trace if we signal out. sys::PrintStackTraceOnErrorSignal(); @@ -79,9 +100,9 @@ int main(int argc, char **argv) { cl::ParseCommandLineOptions(argc, argv, "llvm linker\n"); auto Composite = make_unique<Module>("llvm-link", Context); - Linker L(Composite.get(), SuppressWarnings); + Linker L(Composite.get()); - std::string ErrorMessage; + Context.setDiagnosticHandler(diagnosticHandler); for (unsigned i = 0; i < InputFilenames.size(); ++i) { std::unique_ptr<Module> M = loadFile(argv[0], InputFilenames[i], Context); if (!M.get()) { @@ -91,11 +112,8 @@ int main(int argc, char **argv) { if (Verbose) errs() << "Linking in '" << InputFilenames[i] << "'\n"; - if (L.linkInModule(M.get(), &ErrorMessage)) { - errs() << argv[0] << ": link error in '" << InputFilenames[i] - << "': " << ErrorMessage << "\n"; + if (L.linkInModule(M.get())) return 1; - } } if (DumpAsm) errs() << "Here's the assembly:\n" << *Composite; |