From c73c9d273dfe5b12ae50cc5f1a6c7b763ee1a746 Mon Sep 17 00:00:00 2001 From: Pete Cooper Date: Wed, 30 Mar 2016 20:36:31 +0000 Subject: [PATCH] Convert lld Pass::runOnFile to llvm::Error from std::error_code. NFC. Pretty mechanical change here. Just replacing all the std::error_code() with llvm::Error() and make_dynamic_error_code with make_error llvm-svn: 264917 --- lld/include/lld/Core/Pass.h | 3 ++- lld/include/lld/Core/PassManager.h | 7 ++++--- lld/lib/Driver/DarwinLdDriver.cpp | 10 +++++++--- lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp | 6 +++--- lld/lib/ReaderWriter/MachO/GOTPass.cpp | 4 ++-- lld/lib/ReaderWriter/MachO/LayoutPass.cpp | 4 ++-- lld/lib/ReaderWriter/MachO/LayoutPass.h | 2 +- lld/lib/ReaderWriter/MachO/ObjCPass.cpp | 4 ++-- lld/lib/ReaderWriter/MachO/ShimPass.cpp | 6 +++--- lld/lib/ReaderWriter/MachO/StubsPass.cpp | 8 ++++---- lld/lib/ReaderWriter/MachO/TLVPass.cpp | 6 +++--- 11 files changed, 33 insertions(+), 27 deletions(-) diff --git a/lld/include/lld/Core/Pass.h b/lld/include/lld/Core/Pass.h index da62e23..0527f02 100644 --- a/lld/include/lld/Core/Pass.h +++ b/lld/include/lld/Core/Pass.h @@ -13,6 +13,7 @@ #include "lld/Core/Atom.h" #include "lld/Core/File.h" #include "lld/Core/Reference.h" +#include "llvm/Support/Error.h" #include namespace lld { @@ -33,7 +34,7 @@ public: virtual ~Pass() { } /// Do the actual work of the Pass. - virtual std::error_code perform(SimpleFile &mergedFile) = 0; + virtual llvm::Error perform(SimpleFile &mergedFile) = 0; protected: // Only subclassess can be instantiated. diff --git a/lld/include/lld/Core/PassManager.h b/lld/include/lld/Core/PassManager.h index 62aa119..71a25cc 100644 --- a/lld/include/lld/Core/PassManager.h +++ b/lld/include/lld/Core/PassManager.h @@ -12,6 +12,7 @@ #include "lld/Core/LLVM.h" #include "lld/Core/Pass.h" +#include "llvm/Support/Error.h" #include #include @@ -31,11 +32,11 @@ public: _passes.push_back(std::move(pass)); } - std::error_code runOnFile(SimpleFile &file) { + llvm::Error runOnFile(SimpleFile &file) { for (std::unique_ptr &pass : _passes) - if (std::error_code EC = pass->perform(file)) + if (llvm::Error EC = pass->perform(file)) return EC; - return std::error_code(); + return llvm::Error(); } private: diff --git a/lld/lib/Driver/DarwinLdDriver.cpp b/lld/lib/Driver/DarwinLdDriver.cpp index 914c236..1968bc8 100644 --- a/lld/lib/Driver/DarwinLdDriver.cpp +++ b/lld/lib/Driver/DarwinLdDriver.cpp @@ -28,6 +28,7 @@ #include "llvm/Option/Arg.h" #include "llvm/Option/Option.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Support/Error.h" #include "llvm/Support/Format.h" #include "llvm/Support/Path.h" #include "llvm/Support/raw_ostream.h" @@ -1183,9 +1184,12 @@ bool link(llvm::ArrayRef args, raw_ostream &diagnostics) { ScopedTask passTask(getDefaultDomain(), "Passes"); PassManager pm; ctx.addPasses(pm); - if (std::error_code ec = pm.runOnFile(*merged)) { - diagnostics << "Failed to write file '" << ctx.outputPath() - << "': " << ec.message() << "\n"; + if (auto ec = pm.runOnFile(*merged)) { + // FIXME: This should be passed to logAllUnhandledErrors but it needs + // to be passed a Twine instead of a string. + diagnostics << "Failed to run passes on file '" << ctx.outputPath() + << "': "; + logAllUnhandledErrors(std::move(ec), diagnostics, std::string()); return false; } diff --git a/lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp b/lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp index 088f93b..6f5ab83 100644 --- a/lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp +++ b/lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp @@ -281,7 +281,7 @@ public: } private: - std::error_code perform(SimpleFile &mergedFile) override { + llvm::Error perform(SimpleFile &mergedFile) override { DEBUG(llvm::dbgs() << "MachO Compact Unwind pass\n"); std::map unwindLocs; @@ -298,7 +298,7 @@ private: // Skip rest of pass if no unwind info. if (unwindLocs.empty() && dwarfFrames.empty()) - return std::error_code(); + return llvm::Error(); // FIXME: if there are more than 4 personality functions then we need to // defer to DWARF info for the ones we don't put in the list. They should @@ -353,7 +353,7 @@ private: return atom->contentType() == DefinedAtom::typeCompactUnwindInfo; }); - return std::error_code(); + return llvm::Error(); } void collectCompactUnwindEntries( diff --git a/lld/lib/ReaderWriter/MachO/GOTPass.cpp b/lld/lib/ReaderWriter/MachO/GOTPass.cpp index 400dbf7..6cdca0a 100644 --- a/lld/lib/ReaderWriter/MachO/GOTPass.cpp +++ b/lld/lib/ReaderWriter/MachO/GOTPass.cpp @@ -98,7 +98,7 @@ public: } private: - std::error_code perform(SimpleFile &mergedFile) override { + llvm::Error perform(SimpleFile &mergedFile) override { // Scan all references in all atoms. for (const DefinedAtom *atom : mergedFile.defined()) { for (const Reference *ref : *atom) { @@ -134,7 +134,7 @@ private: for (const GOTEntryAtom *slot : entries) mergedFile.addAtom(*slot); - return std::error_code(); + return llvm::Error(); } bool shouldReplaceTargetWithGOTAtom(const Atom *target, bool canBypassGOT) { diff --git a/lld/lib/ReaderWriter/MachO/LayoutPass.cpp b/lld/lib/ReaderWriter/MachO/LayoutPass.cpp index 811f74a..915a041 100644 --- a/lld/lib/ReaderWriter/MachO/LayoutPass.cpp +++ b/lld/lib/ReaderWriter/MachO/LayoutPass.cpp @@ -439,7 +439,7 @@ void LayoutPass::undecorate(SimpleFile::DefinedAtomRange &atomRange, } /// Perform the actual pass -std::error_code LayoutPass::perform(SimpleFile &mergedFile) { +llvm::Error LayoutPass::perform(SimpleFile &mergedFile) { DEBUG(llvm::dbgs() << "******** Laying out atoms:\n"); // sort the atoms ScopedTask task(getDefaultDomain(), "LayoutPass"); @@ -473,7 +473,7 @@ std::error_code LayoutPass::perform(SimpleFile &mergedFile) { }); DEBUG(llvm::dbgs() << "******** Finished laying out atoms\n"); - return std::error_code(); + return llvm::Error(); } void addLayoutPass(PassManager &pm, const MachOLinkingContext &ctx) { diff --git a/lld/lib/ReaderWriter/MachO/LayoutPass.h b/lld/lib/ReaderWriter/MachO/LayoutPass.h index eb9b99a..8cf741e 100644 --- a/lld/lib/ReaderWriter/MachO/LayoutPass.h +++ b/lld/lib/ReaderWriter/MachO/LayoutPass.h @@ -66,7 +66,7 @@ public: LayoutPass(const Registry ®istry, SortOverride sorter); /// Sorts atoms in mergedFile by content type then by command line order. - std::error_code perform(SimpleFile &mergedFile) override; + llvm::Error perform(SimpleFile &mergedFile) override; ~LayoutPass() override = default; diff --git a/lld/lib/ReaderWriter/MachO/ObjCPass.cpp b/lld/lib/ReaderWriter/MachO/ObjCPass.cpp index f8c7310..ba24b3f 100644 --- a/lld/lib/ReaderWriter/MachO/ObjCPass.cpp +++ b/lld/lib/ReaderWriter/MachO/ObjCPass.cpp @@ -99,11 +99,11 @@ public: _file.setOrdinal(_ctx.getNextOrdinalAndIncrement()); } - std::error_code perform(SimpleFile &mergedFile) override { + llvm::Error perform(SimpleFile &mergedFile) override { // Add the image info. mergedFile.addAtom(*getImageInfo()); - return std::error_code(); + return llvm::Error(); } private: diff --git a/lld/lib/ReaderWriter/MachO/ShimPass.cpp b/lld/lib/ReaderWriter/MachO/ShimPass.cpp index 18ed8f83..cd53671 100644 --- a/lld/lib/ReaderWriter/MachO/ShimPass.cpp +++ b/lld/lib/ReaderWriter/MachO/ShimPass.cpp @@ -47,7 +47,7 @@ public: _file.setOrdinal(_ctx.getNextOrdinalAndIncrement()); } - std::error_code perform(SimpleFile &mergedFile) override { + llvm::Error perform(SimpleFile &mergedFile) override { // Scan all references in all atoms. for (const DefinedAtom *atom : mergedFile.defined()) { for (const Reference *ref : *atom) { @@ -66,7 +66,7 @@ public: } // Exit early if no shims needed. if (_targetToShim.empty()) - return std::error_code(); + return llvm::Error(); // Sort shim atoms so the layout order is stable. std::vector shims; @@ -83,7 +83,7 @@ public: for (const DefinedAtom *shim : shims) mergedFile.addAtom(*shim); - return std::error_code(); + return llvm::Error(); } private: diff --git a/lld/lib/ReaderWriter/MachO/StubsPass.cpp b/lld/lib/ReaderWriter/MachO/StubsPass.cpp index 2539c26..d53b78b 100644 --- a/lld/lib/ReaderWriter/MachO/StubsPass.cpp +++ b/lld/lib/ReaderWriter/MachO/StubsPass.cpp @@ -215,10 +215,10 @@ public: _file.setOrdinal(_ctx.getNextOrdinalAndIncrement()); } - std::error_code perform(SimpleFile &mergedFile) override { + llvm::Error perform(SimpleFile &mergedFile) override { // Skip this pass if output format uses text relocations instead of stubs. if (!this->noTextRelocs()) - return std::error_code(); + return llvm::Error(); // Scan all references in all atoms. for (const DefinedAtom *atom : mergedFile.defined()) { @@ -245,7 +245,7 @@ public: // Exit early if no stubs needed. if (_targetToUses.empty()) - return std::error_code(); + return llvm::Error(); // First add help-common and GOT slots used by lazy binding. SimpleDefinedAtom *helperCommonAtom = @@ -323,7 +323,7 @@ public: lazyOffset += target->name().size() + 12; } - return std::error_code(); + return llvm::Error(); } private: diff --git a/lld/lib/ReaderWriter/MachO/TLVPass.cpp b/lld/lib/ReaderWriter/MachO/TLVPass.cpp index 41aa223..7a8496c 100644 --- a/lld/lib/ReaderWriter/MachO/TLVPass.cpp +++ b/lld/lib/ReaderWriter/MachO/TLVPass.cpp @@ -72,7 +72,7 @@ public: } private: - std::error_code perform(SimpleFile &mergedFile) override { + llvm::Error perform(SimpleFile &mergedFile) override { bool allowTLV = _ctx.minOS("10.7", "1.0"); for (const DefinedAtom *atom : mergedFile.defined()) { @@ -81,7 +81,7 @@ private: continue; if (!allowTLV) - return make_dynamic_error_code( + return llvm::make_error( "targeted OS version does not support use of thread local " "variables in " + atom->name() + " for architecture " + _ctx.archName()); @@ -107,7 +107,7 @@ private: for (const TLVPEntryAtom *slot : entries) mergedFile.addAtom(*slot); - return std::error_code(); + return llvm::Error(); } const DefinedAtom *makeTLVPEntry(const Atom *target) { -- 2.7.4