From dda6f52db192491cd828db5d4fb56be41d4897ac Mon Sep 17 00:00:00 2001 From: Ben Langmuir Date: Thu, 27 Feb 2014 19:20:35 +0000 Subject: Revert "Remove constructors from FileEntry that prevent owning resources" This reverts commit r202420, which broke the build. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202421 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/FileManager.h | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'include/clang/Basic/FileManager.h') diff --git a/include/clang/Basic/FileManager.h b/include/clang/Basic/FileManager.h index 616f9846a2..bd85318e2f 100644 --- a/include/clang/Basic/FileManager.h +++ b/include/clang/Basic/FileManager.h @@ -27,7 +27,6 @@ #include "llvm/Support/Allocator.h" // FIXME: Enhance libsystem to support inode and other fields in stat. #include -#include #ifdef _MSC_VER typedef unsigned short mode_t; @@ -77,15 +76,27 @@ class FileEntry { File.reset(0); // rely on destructor to close File } - FileEntry(const FileEntry &) LLVM_DELETED_FUNCTION; - void operator=(const FileEntry &) LLVM_DELETED_FUNCTION; - public: + FileEntry(llvm::sys::fs::UniqueID UniqueID, bool IsNamedPipe, bool InPCH) + : Name(0), UniqueID(UniqueID), IsNamedPipe(IsNamedPipe), InPCH(InPCH), + IsValid(false) + {} + // Add a default constructor for use with llvm::StringMap FileEntry() : Name(0), UniqueID(0, 0), IsNamedPipe(false), InPCH(false), IsValid(false) {} + FileEntry(const FileEntry &FE) { + memcpy(this, &FE, sizeof(FE)); + assert(!File && "Cannot copy a file-owning FileEntry"); + } + + void operator=(const FileEntry &FE) { + memcpy(this, &FE, sizeof(FE)); + assert(!File && "Cannot assign a file-owning FileEntry"); + } + const char *getName() const { return Name; } bool isValid() const { return IsValid; } off_t getSize() const { return Size; } @@ -117,11 +128,14 @@ class FileManager : public RefCountedBase { IntrusiveRefCntPtr FS; FileSystemOptions FileSystemOpts; + class UniqueDirContainer; + class UniqueFileContainer; + /// \brief Cache for existing real directories. - std::map UniqueRealDirs; + UniqueDirContainer &UniqueRealDirs; /// \brief Cache for existing real files. - std::map UniqueRealFiles; + UniqueFileContainer &UniqueRealFiles; /// \brief The virtual directories that we have allocated. /// -- cgit v1.2.1