Return an error_code from materializeAllPermanently.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199275 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2014-01-14 23:51:27 +00:00
parent 06a3bddb36
commit 1dc66089e6
7 changed files with 25 additions and 21 deletions

View File

@ -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

View File

@ -3359,7 +3359,9 @@ Module *llvm::ParseBitcodeFile(MemoryBuffer *Buffer, LLVMContext& Context,
static_cast<BitcodeReader*>(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;
}

View File

@ -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);
}

View File

@ -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();
}
//===----------------------------------------------------------------------===//

View File

@ -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)) {

View File

@ -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);

View File

@ -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();
}
}
}