From: Jonas Devlieghere Date: Wed, 5 Jun 2019 17:14:32 +0000 (+0000) Subject: [dsymutil] Support more than 4 architectures X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e2172b40a8a7412aa81bc811484266f8b827a6ce;p=llvm [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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362621 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/dsymutil/MachOUtils.cpp b/tools/dsymutil/MachOUtils.cpp index b7ab35274f9..cd0f2805dc2 100644 --- a/tools/dsymutil/MachOUtils.cpp +++ b/tools/dsymutil/MachOUtils.cpp @@ -35,7 +35,7 @@ llvm::Error ArchAndFile::createTempFile() { if (!T) return T.takeError(); - File = llvm::Optional(std::move(*T)); + File = llvm::make_unique(std::move(*T)); return Error::success(); } diff --git a/tools/dsymutil/MachOUtils.h b/tools/dsymutil/MachOUtils.h index 83b648122b7..bc88f58cf0f 100644 --- a/tools/dsymutil/MachOUtils.h +++ b/tools/dsymutil/MachOUtils.h @@ -26,13 +26,14 @@ namespace MachOUtils { struct ArchAndFile { std::string Arch; // Optional because TempFile has no default constructor. - Optional File; + std::unique_ptr File; llvm::Error createTempFile(); llvm::StringRef path() const; ArchAndFile(StringRef Arch) : Arch(Arch) {} ArchAndFile(ArchAndFile &&A) = default; + ArchAndFile &operator=(ArchAndFile &&A) = default; ~ArchAndFile(); };