diff options
| author | Jonas Devlieghere <jonas@devlieghere.com> | 2019-06-05 17:14:32 +0000 |
|---|---|---|
| committer | Jonas Devlieghere <jonas@devlieghere.com> | 2019-06-05 17:14:32 +0000 |
| commit | 3027a2999c32d4cdedf9b639b61fc4653f1bba4b (patch) | |
| tree | 9a51a70b4374f921b7a7439708b88fa351e486f8 | |
| parent | 2bf82879bde8565c882c315b815784c6c5f64152 (diff) | |
| download | bcm5719-llvm-3027a2999c32d4cdedf9b639b61fc4653f1bba4b.tar.gz bcm5719-llvm-3027a2999c32d4cdedf9b639b61fc4653f1bba4b.zip | |
[dsymutil] Support more than 4 architectures
When running dsymutil on a fat binary, we use temporary files in a small
vector of size four. When processing more than 4 architectures, this
resulted in a user-after-move, because the temporary files got moved to
the heap. Instead of storing an optional temp file, we now use a unique
pointer, so the location of the actual temp file doesn't change.
We could test this by checking in 5 binaries for 5 different
architectures, but this seems wasteful, especially since the number of
elements in the small vector is arbitrary.
llvm-svn: 362621
| -rw-r--r-- | llvm/tools/dsymutil/MachOUtils.cpp | 2 | ||||
| -rw-r--r-- | llvm/tools/dsymutil/MachOUtils.h | 3 |
2 files changed, 3 insertions, 2 deletions
diff --git a/llvm/tools/dsymutil/MachOUtils.cpp b/llvm/tools/dsymutil/MachOUtils.cpp index b7ab35274f9..cd0f2805dc2 100644 --- a/llvm/tools/dsymutil/MachOUtils.cpp +++ b/llvm/tools/dsymutil/MachOUtils.cpp @@ -35,7 +35,7 @@ llvm::Error ArchAndFile::createTempFile() { if (!T) return T.takeError(); - File = llvm::Optional<sys::fs::TempFile>(std::move(*T)); + File = llvm::make_unique<sys::fs::TempFile>(std::move(*T)); return Error::success(); } diff --git a/llvm/tools/dsymutil/MachOUtils.h b/llvm/tools/dsymutil/MachOUtils.h index 83b648122b7..bc88f58cf0f 100644 --- a/llvm/tools/dsymutil/MachOUtils.h +++ b/llvm/tools/dsymutil/MachOUtils.h @@ -26,13 +26,14 @@ namespace MachOUtils { struct ArchAndFile { std::string Arch; // Optional because TempFile has no default constructor. - Optional<llvm::sys::fs::TempFile> File; + std::unique_ptr<llvm::sys::fs::TempFile> File; llvm::Error createTempFile(); llvm::StringRef path() const; ArchAndFile(StringRef Arch) : Arch(Arch) {} ArchAndFile(ArchAndFile &&A) = default; + ArchAndFile &operator=(ArchAndFile &&A) = default; ~ArchAndFile(); }; |

