From 1dc66089e6e1e5d226ec1f5e98a0612f68def89d Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 14 Jan 2014 23:51:27 +0000 Subject: Return an error_code from materializeAllPermanently. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199275 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/Module.h | 10 ++++------ lib/Bitcode/Reader/BitcodeReader.cpp | 4 +++- lib/ExecutionEngine/Interpreter/Interpreter.cpp | 5 ++++- lib/IR/Module.cpp | 12 +++++------- lib/LTO/LTOModule.cpp | 2 +- tools/lli/lli.cpp | 6 +++--- tools/llvm-dis/llvm-dis.cpp | 7 +++++-- 7 files changed, 25 insertions(+), 21 deletions(-) diff --git a/include/llvm/IR/Module.h b/include/llvm/IR/Module.h index 4bfa9e68aa..b965c9ee56 100644 --- a/include/llvm/IR/Module.h +++ b/include/llvm/IR/Module.h @@ -454,12 +454,10 @@ public: /// Make sure all GlobalValues in this Module are fully read. error_code materializeAll(); - /// MaterializeAllPermanently - Make sure all GlobalValues in this Module are - /// fully read and clear the Materializer. If the module is corrupt, this - /// returns true, fills in the optional string with information about the - /// problem, and DOES NOT clear the old Materializer. If successful, this - /// returns false. - bool MaterializeAllPermanently(std::string *ErrInfo = 0); + /// Make sure all GlobalValues in this Module are fully read and clear the + /// Materializer. If the module is corrupt, this DOES NOT clear the old + /// Materializer. + error_code materializeAllPermanently(); /// @} /// @name Direct access to the globals list, functions list, and symbol table diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 81ed803ba0..c36dae892c 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -3359,7 +3359,9 @@ Module *llvm::ParseBitcodeFile(MemoryBuffer *Buffer, LLVMContext& Context, static_cast(M->getMaterializer())->setBufferOwned(false); // Read in the entire module, and destroy the BitcodeReader. - if (M->MaterializeAllPermanently(ErrMsg)) { + if (error_code EC = M->materializeAllPermanently()) { + if (ErrMsg) + *ErrMsg = EC.message(); delete M; return 0; } diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.cpp b/lib/ExecutionEngine/Interpreter/Interpreter.cpp index 9ee9d9456d..6d4f6f716f 100644 --- a/lib/ExecutionEngine/Interpreter/Interpreter.cpp +++ b/lib/ExecutionEngine/Interpreter/Interpreter.cpp @@ -34,9 +34,12 @@ extern "C" void LLVMLinkInInterpreter() { } /// ExecutionEngine *Interpreter::create(Module *M, std::string* ErrStr) { // Tell this Module to materialize everything and release the GVMaterializer. - if (M->MaterializeAllPermanently(ErrStr)) + if (error_code EC = M->materializeAllPermanently()) { + if (ErrStr) + *ErrStr = EC.message(); // We got an error, just return 0 return 0; + } return new Interpreter(M); } diff --git a/lib/IR/Module.cpp b/lib/IR/Module.cpp index 06eea7e388..d911c7e2b5 100644 --- a/lib/IR/Module.cpp +++ b/lib/IR/Module.cpp @@ -383,14 +383,12 @@ error_code Module::materializeAll() { return Materializer->MaterializeModule(this); } -bool Module::MaterializeAllPermanently(std::string *ErrInfo) { - if (error_code EC = materializeAll()) { - if (ErrInfo) - *ErrInfo = EC.message(); - return true; - } +error_code Module::materializeAllPermanently() { + if (error_code EC = materializeAll()) + return EC; + Materializer.reset(); - return false; + return error_code::success(); } //===----------------------------------------------------------------------===// diff --git a/lib/LTO/LTOModule.cpp b/lib/LTO/LTOModule.cpp index dcfd59e752..79cff1f68f 100644 --- a/lib/LTO/LTOModule.cpp +++ b/lib/LTO/LTOModule.cpp @@ -169,7 +169,7 @@ LTOModule *LTOModule::makeLTOModule(MemoryBuffer *buffer, TargetMachine *target = march->createTargetMachine(TripleStr, CPU, FeatureStr, options); - m->MaterializeAllPermanently(); + m->materializeAllPermanently(); LTOModule *Ret = new LTOModule(m.take(), target); if (Ret->parseSymbols(errMsg)) { diff --git a/tools/lli/lli.cpp b/tools/lli/lli.cpp index c6db51a2b0..8e6669221b 100644 --- a/tools/lli/lli.cpp +++ b/tools/lli/lli.cpp @@ -413,11 +413,10 @@ int main(int argc, char **argv, char * const *envp) { } // If not jitting lazily, load the whole bitcode file eagerly too. - std::string ErrorMsg; if (NoLazyCompilation) { - if (Mod->MaterializeAllPermanently(&ErrorMsg)) { + if (error_code EC = Mod->materializeAllPermanently()) { errs() << argv[0] << ": bitcode didn't read correctly.\n"; - errs() << "Reason: " << ErrorMsg << "\n"; + errs() << "Reason: " << EC.message() << "\n"; exit(1); } } @@ -433,6 +432,7 @@ int main(int argc, char **argv, char * const *envp) { DebugIRPass->runOnModule(*Mod); } + std::string ErrorMsg; EngineBuilder builder(Mod); builder.setMArch(MArch); builder.setMCPU(MCPU); diff --git a/tools/llvm-dis/llvm-dis.cpp b/tools/llvm-dis/llvm-dis.cpp index 6d471efcc0..9fb056510c 100644 --- a/tools/llvm-dis/llvm-dis.cpp +++ b/tools/llvm-dis/llvm-dis.cpp @@ -135,8 +135,11 @@ int main(int argc, char **argv) { DisplayFilename = InputFilename; M.reset(getStreamedBitcodeModule(DisplayFilename, streamer, Context, &ErrorMessage)); - if(M.get() != 0 && M->MaterializeAllPermanently(&ErrorMessage)) { - M.reset(); + if(M.get() != 0) { + if (error_code EC = M->materializeAllPermanently()) { + ErrorMessage = EC.message(); + M.reset(); + } } } -- cgit v1.2.3