mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 04:39:44 +00:00
[LTO] Fix error reporting when a file passed to libLTO is invalid or non-existent
This addresses PR26060 where function lto_module_create() could return nullptr but lto_get_error_message() returned an empty string. The error() call after LTOModule::createFromFile() in llvm-lto is then removed because any error from this function should go through the diagnostic handler in llvm-lto which will exit the program. The error() call was added because this previously did not happen when the file was non-existent. This is fixed by the patch. (The situation that llvm-lto reports an error when the input file does not exist is tested by llvm/tools/llvm-lto/error.ll). Differential Revision: http://reviews.llvm.org/D16106 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@258298 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d54bc6a415
commit
616e99df64
@ -105,8 +105,10 @@ LTOModule::createFromFile(LLVMContext &Context, const char *path,
|
||||
TargetOptions options) {
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> BufferOrErr =
|
||||
MemoryBuffer::getFile(path);
|
||||
if (std::error_code EC = BufferOrErr.getError())
|
||||
if (std::error_code EC = BufferOrErr.getError()) {
|
||||
Context.emitError(EC.message());
|
||||
return EC;
|
||||
}
|
||||
std::unique_ptr<MemoryBuffer> Buffer = std::move(BufferOrErr.get());
|
||||
return makeLTOModule(Buffer->getMemBufferRef(), options, &Context);
|
||||
}
|
||||
@ -123,8 +125,10 @@ LTOModule::createFromOpenFileSlice(LLVMContext &Context, int fd,
|
||||
off_t offset, TargetOptions options) {
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> BufferOrErr =
|
||||
MemoryBuffer::getOpenFileSlice(fd, path, map_size, offset);
|
||||
if (std::error_code EC = BufferOrErr.getError())
|
||||
if (std::error_code EC = BufferOrErr.getError()) {
|
||||
Context.emitError(EC.message());
|
||||
return EC;
|
||||
}
|
||||
std::unique_ptr<MemoryBuffer> Buffer = std::move(BufferOrErr.get());
|
||||
return makeLTOModule(Buffer->getMemBufferRef(), options, &Context);
|
||||
}
|
||||
@ -158,8 +162,10 @@ parseBitcodeFileImpl(MemoryBufferRef Buffer, LLVMContext &Context,
|
||||
// Find the buffer.
|
||||
ErrorOr<MemoryBufferRef> MBOrErr =
|
||||
IRObjectFile::findBitcodeInMemBuffer(Buffer);
|
||||
if (std::error_code EC = MBOrErr.getError())
|
||||
if (std::error_code EC = MBOrErr.getError()) {
|
||||
Context.emitError(EC.message());
|
||||
return EC;
|
||||
}
|
||||
|
||||
if (!ShouldBeLazy) {
|
||||
// Parse the full file.
|
||||
|
@ -294,7 +294,6 @@ int main(int argc, char **argv) {
|
||||
CurrentActivity = "loading file '" + InputFilenames[i] + "'";
|
||||
ErrorOr<std::unique_ptr<LTOModule>> ModuleOrErr =
|
||||
LTOModule::createFromFile(Context, InputFilenames[i].c_str(), Options);
|
||||
error(ModuleOrErr, "error " + CurrentActivity);
|
||||
std::unique_ptr<LTOModule> &Module = *ModuleOrErr;
|
||||
CurrentActivity = "";
|
||||
|
||||
|
@ -81,7 +81,6 @@ static void diagnosticHandler(const DiagnosticInfo &DI, void *Context) {
|
||||
DiagnosticPrinterRawOStream DP(Stream);
|
||||
DI.print(DP);
|
||||
}
|
||||
sLastErrorString += '\n';
|
||||
}
|
||||
|
||||
// Initialize the configured targets if they have not been initialized.
|
||||
@ -111,7 +110,6 @@ namespace {
|
||||
static void handleLibLTODiagnostic(lto_codegen_diagnostic_severity_t Severity,
|
||||
const char *Msg, void *) {
|
||||
sLastErrorString = Msg;
|
||||
sLastErrorString += "\n";
|
||||
}
|
||||
|
||||
// This derived class owns the native object file. This helps implement the
|
||||
|
Loading…
Reference in New Issue
Block a user