diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2017-11-08 21:15:21 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2017-11-08 21:15:21 +0000 |
| commit | 85593c239873f5743cc748a85446d6d25de9ed1c (patch) | |
| tree | 7ae94d504a52208c419b94b676dc940184ba817e | |
| parent | edf782f0d046ec79e84041ab42415c17cefc0335 (diff) | |
| download | bcm5719-llvm-85593c239873f5743cc748a85446d6d25de9ed1c.tar.gz bcm5719-llvm-85593c239873f5743cc748a85446d6d25de9ed1c.zip | |
Make sure an error is always handled.
llvm-svn: 317724
| -rw-r--r-- | llvm/test/tools/llvm-objcopy/fail-no-output-directory.test | 11 | ||||
| -rw-r--r-- | llvm/tools/llvm-objcopy/llvm-objcopy.cpp | 7 |
2 files changed, 15 insertions, 3 deletions
diff --git a/llvm/test/tools/llvm-objcopy/fail-no-output-directory.test b/llvm/test/tools/llvm-objcopy/fail-no-output-directory.test new file mode 100644 index 00000000000..89bf62d3556 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/fail-no-output-directory.test @@ -0,0 +1,11 @@ +# RUN: yaml2obj %s > %t +# RUN: not llvm-objcopy %t no/such/dir 2>&1 | FileCheck %s +# CHECK: failed to open no/such/dir + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 + diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp index c923f902db8..54186f63c07 100644 --- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp +++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp @@ -116,10 +116,11 @@ void WriteObjectFile(const Object<ELFT> &Obj, StringRef File) { Expected<std::unique_ptr<FileOutputBuffer>> BufferOrErr = FileOutputBuffer::create(File, Obj.totalSize(), FileOutputBuffer::F_executable); - if (BufferOrErr.takeError()) + handleAllErrors(BufferOrErr.takeError(), [](const ErrorInfoBase &) { error("failed to open " + OutputFilename); - else - Buffer = std::move(*BufferOrErr); + }); + Buffer = std::move(*BufferOrErr); + Obj.write(*Buffer); if (auto E = Buffer->commit()) reportError(File, errorToErrorCode(std::move(E))); |

