diff --git a/include/revng/Pipeline/Runner.h b/include/revng/Pipeline/Runner.h index 7f20f02ef..b72e94ce3 100644 --- a/include/revng/Pipeline/Runner.h +++ b/include/revng/Pipeline/Runner.h @@ -127,12 +127,12 @@ public: /// Given a target, all occurrences of that target from every container in /// every step will be registered in the returned invalidation map. The /// propagations will not be calculated. - llvm::Error getInvalidations(const Target &Target, - pipeline::TargetInStepSet &Invalidations) const; + void getInvalidations(const Target &Target, + pipeline::TargetInStepSet &Invalidations) const; /// Deduces and register in the invalidation map all the targets that have /// been produced starting from targets already presents in the map. - llvm::Error getInvalidations(pipeline::TargetInStepSet &Invalidated) const; + void getInvalidations(pipeline::TargetInStepSet &Invalidated) const; public: template diff --git a/lib/Lift/InstructionTranslator.cpp b/lib/Lift/InstructionTranslator.cpp index 889e7e050..5a8224e52 100644 --- a/lib/Lift/InstructionTranslator.cpp +++ b/lib/Lift/InstructionTranslator.cpp @@ -768,8 +768,10 @@ IT::translate(PTCInstruction *Instr, MetaAddress PC, MetaAddress NextPC) { InArgs); // Check if there was an error while translating the instruction - if (!Result) + if (!Result) { + llvm::consumeError(Result.takeError()); return Abort; + } size_t OutSize = TheInstruction.OutArguments.size(); revng_assert(Result->size() == OutSize); diff --git a/lib/Model/Importer/Binary/MachOImporter.cpp b/lib/Model/Importer/Binary/MachOImporter.cpp index b20b66130..a59c0f19d 100644 --- a/lib/Model/Importer/Binary/MachOImporter.cpp +++ b/lib/Model/Importer/Binary/MachOImporter.cpp @@ -282,7 +282,6 @@ Error MachOImporter::import() { } Error TheError = Error::success(); - for (const MachOBindEntry &U : MachO.bindTable(TheError)) registerBindEntry(&U); if (TheError) diff --git a/lib/Model/Importer/WellKnownModels.cpp b/lib/Model/Importer/WellKnownModels.cpp index f9fe04267..b9bb01e95 100644 --- a/lib/Model/Importer/WellKnownModels.cpp +++ b/lib/Model/Importer/WellKnownModels.cpp @@ -48,7 +48,7 @@ public: std::vector> AcceptedKinds; public: - llvm::Error run(pipeline::ExecutionContext &Context) { + void run(pipeline::ExecutionContext &Context) { std::vector> WellKnownModels; std::map> @@ -58,10 +58,8 @@ public: // Load all well-known models for (const std::string &Path : revng::ResourceFinder.list("share/revng/well-known-models", ".yml")) { - auto MaybeModel = TupleTree::fromFile(Path); - revng_assert(MaybeModel); - using namespace std; - auto NewWKM = make_unique(std::move(*MaybeModel), Model); + auto Model = llvm::cantFail(TupleTree::fromFile(Path)); + auto NewWKM = std::make_unique(std::move(Model), Model); WellKnownModels.push_back(std::move(NewWKM)); } @@ -106,8 +104,6 @@ public: model::flattenPrimitiveTypedefs(Model); model::deduplicateCollidingNames(Model); - - return llvm::Error::success(); } }; diff --git a/lib/Pipeline/Runner.cpp b/lib/Pipeline/Runner.cpp index 54d7307ed..d24e2655c 100644 --- a/lib/Pipeline/Runner.cpp +++ b/lib/Pipeline/Runner.cpp @@ -106,7 +106,7 @@ static void explainPipeline(const ContainerToTargetsMap &Targets, ExplanationLogger << DoLog; } -Error Runner::getInvalidations(TargetInStepSet &Invalidated) const { +void Runner::getInvalidations(TargetInStepSet &Invalidated) const { for (const Step &NextS : *this) { if (not NextS.hasPredecessor()) @@ -123,8 +123,6 @@ Error Runner::getInvalidations(TargetInStepSet &Invalidated) const { NextS.containers().intersect(Deduced); Outputs.merge(Deduced); } - - return Error::success(); } Step &Runner::addStep(Step &&NewStep) { @@ -135,8 +133,8 @@ Step &Runner::addStep(Step &&NewStep) { return *ReversePostOrderIndexes.back(); } -llvm::Error Runner::getInvalidations(const Target &Target, - TargetInStepSet &Invalidations) const { +void Runner::getInvalidations(const Target &Target, + TargetInStepSet &Invalidations) const { for (const Step &Step : *this) for (const auto &Container : Step.containers()) { if (Container.second == nullptr) @@ -146,16 +144,13 @@ llvm::Error Runner::getInvalidations(const Target &Target, Invalidations[Step.getName()].add(Container.first(), Target); } } - if (llvm::Error Error = getInvalidations(Invalidations); !!Error) - return Error; - return llvm::Error::success(); + getInvalidations(Invalidations); } Error Runner::invalidate(const Target &Target) { llvm::StringMap Invalidations; - if (llvm::Error Error = getInvalidations(Target, Invalidations); !!Error) - return Error; + getInvalidations(Target, Invalidations); return invalidate(Invalidations); } @@ -482,8 +477,6 @@ void Runner::getDiffInvalidations(const GlobalTupleTreeDiff &Diff, llvm::Error Runner::apply(const GlobalTupleTreeDiff &Diff, TargetInStepSet &Map) { getDiffInvalidations(Diff, Map); - if (auto Error = getInvalidations(Map)) - return Error; - + getInvalidations(Map); return invalidate(Map); } diff --git a/lib/Pipes/PipelineManager.cpp b/lib/Pipes/PipelineManager.cpp index 7a0e8c9f0..994ce0ac1 100644 --- a/lib/Pipes/PipelineManager.cpp +++ b/lib/Pipes/PipelineManager.cpp @@ -563,8 +563,7 @@ PipelineManager::invalidateAllPossibleTargets() { TargetInStepSet Map; Map[Step.first()][Container.first()].push_back(Target); - if (auto Error = Runner->getInvalidations(Map)) - return std::move(Error); + Runner->getInvalidations(Map); if (auto Error = Runner->invalidate(Map)) return std::move(Error); diff --git a/lib/Support/ResourceFinder.cpp b/lib/Support/ResourceFinder.cpp index 240e35079..04e069486 100644 --- a/lib/Support/ResourceFinder.cpp +++ b/lib/Support/ResourceFinder.cpp @@ -28,9 +28,8 @@ std::string getComponentsHash() { std::string Result; for (std::string &File : Files) { - auto MaybeBuffer = llvm::MemoryBuffer::getFile(File); - revng_assert(MaybeBuffer); - llvm::StringRef Contents = MaybeBuffer->get()->getBuffer().trim(); + auto Buf = cantFail(errorOrToExpected(llvm::MemoryBuffer::getFile(File))); + llvm::StringRef Contents = Buf->getBuffer().trim(); Result.append(Contents.begin(), Contents.end()); } diff --git a/lib/TypeShrinking/BitLiveness.cpp b/lib/TypeShrinking/BitLiveness.cpp index 1d98f7893..565bc31d7 100644 --- a/lib/TypeShrinking/BitLiveness.cpp +++ b/lib/TypeShrinking/BitLiveness.cpp @@ -25,6 +25,7 @@ #include "revng/MFP/Graph.h" #include "revng/MFP/MFP.h" #include "revng/Support/Assert.h" +#include "revng/Support/Error.h" #include "revng/TypeShrinking/BitLiveness.h" #include "revng/TypeShrinking/DataFlowGraph.h" @@ -289,7 +290,9 @@ BitLivenessPass::Result BitLivenessPass::run(llvm::Function &F, Entry.Operands = MFPResult.OutValue; } - revng_assert(not DataFlowGraph.verify()); + if (llvm::Error Error = DataFlowGraph.verify()) + revng_abort(revng::unwrapError(std::move(Error)).c_str()); + MFP::Graph MFPGraph(&DataFlowGraph, MFPRes); return Result; diff --git a/tests/unit/Pipeline.cpp b/tests/unit/Pipeline.cpp index 45daaacb3..aa29d0e0a 100644 --- a/tests/unit/Pipeline.cpp +++ b/tests/unit/Pipeline.cpp @@ -822,9 +822,7 @@ BOOST_AUTO_TEST_CASE(SingleElementPipelineForwardFinedGrained) { llvm::StringMap Invalidations; Invalidations[Name].add(CName, {}, RootKind); - auto Error = Pipeline.getInvalidations(Invalidations); - BOOST_TEST(!Error); - + Pipeline.getInvalidations(Invalidations); const auto &EndContainerInvalidations = Invalidations["end"][CName]; BOOST_TEST(not EndContainerInvalidations.empty()); BOOST_TEST((EndContainerInvalidations == TargetsList({ T, T2 }))); @@ -854,8 +852,7 @@ BOOST_AUTO_TEST_CASE(SingleElementPipelineInvalidation) { Target ToKill({}, RootKind); llvm::StringMap Invalidations; - auto Error = Pipeline.getInvalidations(ToKill, Invalidations); - BOOST_TEST(!Error); + Pipeline.getInvalidations(ToKill, Invalidations); const auto &QuantifOfInvalidated = Invalidations["end"][CName] .front() .getPathComponents(); @@ -1320,11 +1317,8 @@ BOOST_AUTO_TEST_CASE(MultiStepInvalidationTest) { pipeline::TargetInStepSet Invalidations; Invalidations[Name][CName].push_back(T); - auto Error = Pipeline.getInvalidations(Invalidations); - BOOST_TEST(!Error); - - Error = Pipeline.invalidate(Invalidations); - + Pipeline.getInvalidations(Invalidations); + llvm::Error Error = Pipeline.invalidate(Invalidations); BOOST_TEST(!Error); BOOST_TEST(C1.get(T) == 0); diff --git a/tools/pipeline/invalidate/Main.cpp b/tools/pipeline/invalidate/Main.cpp index 1ec4072d6..efa28243a 100644 --- a/tools/pipeline/invalidate/Main.cpp +++ b/tools/pipeline/invalidate/Main.cpp @@ -77,7 +77,7 @@ int main(int argc, char *argv[]) { auto Manager = AbortOnError(BaseOptions.makeManager()); auto Map = getTargetInStepSet(Manager.getRunner()); - AbortOnError(Manager.getRunner().getInvalidations(Map)); + Manager.getRunner().getInvalidations(Map); if (DumpPredictedRemovals) { dumpTargetInStepSet(llvm::outs(), Map);