summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2019-06-05 17:14:32 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2019-06-05 17:14:32 +0000
commit3027a2999c32d4cdedf9b639b61fc4653f1bba4b (patch)
tree9a51a70b4374f921b7a7439708b88fa351e486f8
parent2bf82879bde8565c882c315b815784c6c5f64152 (diff)
downloadbcm5719-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.cpp2
-rw-r--r--llvm/tools/dsymutil/MachOUtils.h3
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();
};
OpenPOWER on IntegriCloud