r283856 - Turn FileManager DirectoryEntry::Name from raw pointer to StringRef (NFC)
Reid Kleckner via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 11 09:51:21 PDT 2016
This breaks MSVC 2013 builds:
http://lab.llvm.org:8011/builders/sanitizer-windows/builds/30238/steps/run%20tests/logs/stdio
FAILED:
tools/clang/lib/Frontend/CMakeFiles/clangFrontend.dir/CacheTokens.cpp.obj
...
C:\b\slave\sanitizer-windows\llvm\tools\clang\lib\Frontend\CacheTokens.cpp(63)
: error C2620: '`anonymous-namespace'::PTHEntryKeyVariant::Path' : illegal
union member; type 'llvm::StringRef' has a user-defined constructor or
non-trivial default constructor
C:\b\slave\sanitizer-windows\llvm\tools\clang\lib\Frontend\CacheTokens.cpp(71)
: error C2614: '`anonymous-namespace'::PTHEntryKeyVariant' : illegal member
initialization: 'Path' is not a base or member
C:\b\slave\sanitizer-windows\llvm\tools\clang\lib\Frontend\CacheTokens.cpp(74)
: error C2614: '`anonymous-namespace'::PTHEntryKeyVariant' : illegal member
initialization: 'Path' is not a base or member
C:\b\slave\sanitizer-windows\llvm\tools\clang\lib\Frontend\CacheTokens.cpp(80)
: error C2065: 'Path' : undeclared identifier
On Tue, Oct 11, 2016 at 12:31 AM, Mehdi Amini via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: mehdi_amini
> Date: Tue Oct 11 02:31:29 2016
> New Revision: 283856
>
> URL: http://llvm.org/viewvc/llvm-project?rev=283856&view=rev
> Log:
> Turn FileManager DirectoryEntry::Name from raw pointer to StringRef (NFC)
>
> Modified:
> cfe/trunk/include/clang/Basic/FileManager.h
> cfe/trunk/include/clang/Basic/FileSystemStatCache.h
> cfe/trunk/lib/Basic/FileManager.cpp
> cfe/trunk/lib/Basic/FileSystemStatCache.cpp
> cfe/trunk/lib/Frontend/CacheTokens.cpp
> cfe/trunk/lib/Lex/HeaderSearch.cpp
> cfe/trunk/lib/Lex/PTHLexer.cpp
> cfe/trunk/unittests/Basic/FileManagerTest.cpp
>
> Modified: cfe/trunk/include/clang/Basic/FileManager.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/
> clang/Basic/FileManager.h?rev=283856&r1=283855&r2=283856&view=diff
> ============================================================
> ==================
> --- cfe/trunk/include/clang/Basic/FileManager.h (original)
> +++ cfe/trunk/include/clang/Basic/FileManager.h Tue Oct 11 02:31:29 2016
> @@ -38,11 +38,10 @@ class FileSystemStatCache;
> /// \brief Cached information about one directory (either on disk or in
> /// the virtual file system).
> class DirectoryEntry {
> - const char *Name; // Name of the directory.
> + StringRef Name; // Name of the directory.
> friend class FileManager;
> public:
> - DirectoryEntry() : Name(nullptr) {}
> - const char *getName() const { return Name; }
> + StringRef getName() const { return Name; }
> };
>
> /// \brief Cached information about one file (either on disk
> @@ -165,7 +164,7 @@ class FileManager : public RefCountedBas
> // Caching.
> std::unique_ptr<FileSystemStatCache> StatCache;
>
> - bool getStatValue(const char *Path, FileData &Data, bool isFile,
> + bool getStatValue(StringRef Path, FileData &Data, bool isFile,
> std::unique_ptr<vfs::File> *F);
>
> /// Add all ancestors of the given path (pointing to either a file
>
> Modified: cfe/trunk/include/clang/Basic/FileSystemStatCache.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/
> FileSystemStatCache.h?rev=283856&r1=283855&r2=283856&view=diff
> ============================================================
> ==================
> --- cfe/trunk/include/clang/Basic/FileSystemStatCache.h (original)
> +++ cfe/trunk/include/clang/Basic/FileSystemStatCache.h Tue Oct 11
> 02:31:29 2016
> @@ -68,7 +68,7 @@ public:
> /// success for directories (not files). On a successful file lookup,
> the
> /// implementation can optionally fill in \p F with a valid \p File
> object and
> /// the client guarantees that it will close it.
> - static bool get(const char *Path, FileData &Data, bool isFile,
> + static bool get(StringRef Path, FileData &Data, bool isFile,
> std::unique_ptr<vfs::File> *F, FileSystemStatCache
> *Cache,
> vfs::FileSystem &FS);
>
> @@ -92,11 +92,11 @@ protected:
> // FIXME: The pointer here is a non-owning/optional reference to the
> // unique_ptr. Optional<unique_ptr<vfs::File>&> might be nicer, but
> // Optional needs some work to support references so this isn't
> possible yet.
> - virtual LookupResult getStat(const char *Path, FileData &Data, bool
> isFile,
> + virtual LookupResult getStat(StringRef Path, FileData &Data, bool
> isFile,
> std::unique_ptr<vfs::File> *F,
> vfs::FileSystem &FS) = 0;
>
> - LookupResult statChained(const char *Path, FileData &Data, bool isFile,
> + LookupResult statChained(StringRef Path, FileData &Data, bool isFile,
> std::unique_ptr<vfs::File> *F, vfs::FileSystem
> &FS) {
> if (FileSystemStatCache *Next = getNextStatCache())
> return Next->getStat(Path, Data, isFile, F, FS);
> @@ -121,7 +121,7 @@ public:
> iterator begin() const { return StatCalls.begin(); }
> iterator end() const { return StatCalls.end(); }
>
> - LookupResult getStat(const char *Path, FileData &Data, bool isFile,
> + LookupResult getStat(StringRef Path, FileData &Data, bool isFile,
> std::unique_ptr<vfs::File> *F,
> vfs::FileSystem &FS) override;
> };
>
> Modified: cfe/trunk/lib/Basic/FileManager.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/
> FileManager.cpp?rev=283856&r1=283855&r2=283856&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Basic/FileManager.cpp (original)
> +++ cfe/trunk/lib/Basic/FileManager.cpp Tue Oct 11 02:31:29 2016
> @@ -140,7 +140,7 @@ void FileManager::addAncestorsAsVirtualD
>
> // Add the virtual directory to the cache.
> auto UDE = llvm::make_unique<DirectoryEntry>();
> - UDE->Name = NamedDirEnt.first().data();
> + UDE->Name = NamedDirEnt.first();
> NamedDirEnt.second = UDE.get();
> VirtualDirectoryEntries.push_back(std::move(UDE));
>
> @@ -185,7 +185,7 @@ const DirectoryEntry *FileManager::getDi
>
> // Get the null-terminated directory name as stored as the key of the
> // SeenDirEntries map.
> - const char *InterndDirName = NamedDirEnt.first().data();
> + StringRef InterndDirName = NamedDirEnt.first();
>
> // Check to see if the directory exists.
> FileData Data;
> @@ -203,7 +203,7 @@ const DirectoryEntry *FileManager::getDi
> DirectoryEntry &UDE = UniqueRealDirs[Data.UniqueID];
>
> NamedDirEnt.second = &UDE;
> - if (!UDE.getName()) {
> + if (UDE.getName().empty()) {
> // We don't have this directory yet, add it. We use the string
> // key from the SeenDirEntries map as the string.
> UDE.Name = InterndDirName;
> @@ -232,7 +232,7 @@ const FileEntry *FileManager::getFile(St
>
> // Get the null-terminated file name as stored as the key of the
> // SeenFileEntries map.
> - const char *InterndFileName = NamedFileEnt.first().data();
> + StringRef InterndFileName = NamedFileEnt.first();
>
> // Look up the directory for the file. When looking up something like
> // sys/foo.h we'll discover all of the search directories that have a
> 'sys'
> @@ -463,7 +463,7 @@ FileManager::getBufferForFile(StringRef
> /// if the path points to a virtual file or does not exist, or returns
> /// false if it's an existent real file. If FileDescriptor is NULL,
> /// do directory look-up instead of file look-up.
> -bool FileManager::getStatValue(const char *Path, FileData &Data, bool
> isFile,
> +bool FileManager::getStatValue(StringRef Path, FileData &Data, bool
> isFile,
> std::unique_ptr<vfs::File> *F) {
> // FIXME: FileSystemOpts shouldn't be passed in here, all paths should
> be
> // absolute!
> @@ -535,7 +535,7 @@ StringRef FileManager::getCanonicalName(
>
> #ifdef LLVM_ON_UNIX
> char CanonicalNameBuf[PATH_MAX];
> - if (realpath(Dir->getName(), CanonicalNameBuf))
> + if (realpath(Dir->getName().str().c_str(), CanonicalNameBuf))
> CanonicalName = StringRef(CanonicalNameBuf).
> copy(CanonicalNameStorage);
> #else
> SmallString<256> CanonicalNameBuf(CanonicalName);
>
> Modified: cfe/trunk/lib/Basic/FileSystemStatCache.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/
> FileSystemStatCache.cpp?rev=283856&r1=283855&r2=283856&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Basic/FileSystemStatCache.cpp (original)
> +++ cfe/trunk/lib/Basic/FileSystemStatCache.cpp Tue Oct 11 02:31:29 2016
> @@ -40,7 +40,7 @@ static void copyStatusToFileData(const v
> /// success for directories (not files). On a successful file lookup, the
> /// implementation can optionally fill in FileDescriptor with a valid
> /// descriptor and the client guarantees that it will close it.
> -bool FileSystemStatCache::get(const char *Path, FileData &Data, bool
> isFile,
> +bool FileSystemStatCache::get(StringRef Path, FileData &Data, bool
> isFile,
> std::unique_ptr<vfs::File> *F,
> FileSystemStatCache *Cache, vfs::FileSystem
> &FS) {
> LookupResult R;
> @@ -107,7 +107,7 @@ bool FileSystemStatCache::get(const char
> }
>
> MemorizeStatCalls::LookupResult
> -MemorizeStatCalls::getStat(const char *Path, FileData &Data, bool isFile,
> +MemorizeStatCalls::getStat(StringRef Path, FileData &Data, bool isFile,
> std::unique_ptr<vfs::File> *F, vfs::FileSystem
> &FS) {
> LookupResult Result = statChained(Path, Data, isFile, F, FS);
>
>
> Modified: cfe/trunk/lib/Frontend/CacheTokens.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/
> Frontend/CacheTokens.cpp?rev=283856&r1=283855&r2=283856&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Frontend/CacheTokens.cpp (original)
> +++ cfe/trunk/lib/Frontend/CacheTokens.cpp Tue Oct 11 02:31:29 2016
> @@ -58,18 +58,21 @@ public:
>
>
> class PTHEntryKeyVariant {
> - union { const FileEntry* FE; const char* Path; };
> + union {
> + const FileEntry *FE;
> + StringRef Path;
> + };
> enum { IsFE = 0x1, IsDE = 0x2, IsNoExist = 0x0 } Kind;
> FileData *Data;
>
> public:
> PTHEntryKeyVariant(const FileEntry *fe) : FE(fe), Kind(IsFE),
> Data(nullptr) {}
>
> - PTHEntryKeyVariant(FileData *Data, const char *path)
> - : Path(path), Kind(IsDE), Data(new FileData(*Data)) {}
> + PTHEntryKeyVariant(FileData *Data, StringRef Path)
> + : Path(Path), Kind(IsDE), Data(new FileData(*Data)) {}
>
> - explicit PTHEntryKeyVariant(const char *path)
> - : Path(path), Kind(IsNoExist), Data(nullptr) {}
> + explicit PTHEntryKeyVariant(StringRef Path)
> + : Path(Path), Kind(IsNoExist), Data(nullptr) {}
>
> bool isFile() const { return Kind == IsFE; }
>
> @@ -549,7 +552,7 @@ public:
> StatListener(PTHMap &pm) : PM(pm) {}
> ~StatListener() override {}
>
> - LookupResult getStat(const char *Path, FileData &Data, bool isFile,
> + LookupResult getStat(StringRef Path, FileData &Data, bool isFile,
> std::unique_ptr<vfs::File> *F,
> vfs::FileSystem &FS) override {
> LookupResult Result = statChained(Path, Data, isFile, F, FS);
>
> Modified: cfe/trunk/lib/Lex/HeaderSearch.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/
> HeaderSearch.cpp?rev=283856&r1=283855&r2=283856&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Lex/HeaderSearch.cpp (original)
> +++ cfe/trunk/lib/Lex/HeaderSearch.cpp Tue Oct 11 02:31:29 2016
> @@ -1461,7 +1461,7 @@ std::string HeaderSearch::suggestPathToF
> if (!SearchDirs[I].isNormalDir())
> continue;
>
> - const char *Dir = SearchDirs[I].getDir()->getName();
> + StringRef Dir = SearchDirs[I].getDir()->getName();
> for (auto NI = llvm::sys::path::begin(Name),
> NE = llvm::sys::path::end(Name),
> DI = llvm::sys::path::begin(Dir),
>
> Modified: cfe/trunk/lib/Lex/PTHLexer.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/
> PTHLexer.cpp?rev=283856&r1=283855&r2=283856&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Lex/PTHLexer.cpp (original)
> +++ cfe/trunk/lib/Lex/PTHLexer.cpp Tue Oct 11 02:31:29 2016
> @@ -644,10 +644,10 @@ public:
>
> class PTHStatLookupTrait : public PTHFileLookupCommonTrait {
> public:
> - typedef const char* external_key_type; // const char*
> + typedef StringRef external_key_type; // const char*
> typedef PTHStatData data_type;
>
> - static internal_key_type GetInternalKey(const char *path) {
> + static internal_key_type GetInternalKey(StringRef path) {
> // The key 'kind' doesn't matter here because it is ignored in
> EqualKey.
> return std::make_pair((unsigned char) 0x0, path);
> }
> @@ -694,7 +694,7 @@ public:
> : Cache(FL.getNumBuckets(), FL.getNumEntries(), FL.getBuckets(),
> FL.getBase()) {}
>
> - LookupResult getStat(const char *Path, FileData &Data, bool isFile,
> + LookupResult getStat(StringRef Path, FileData &Data, bool isFile,
> std::unique_ptr<vfs::File> *F,
> vfs::FileSystem &FS) override {
> // Do the lookup for the file's data in the PTH file.
>
> Modified: cfe/trunk/unittests/Basic/FileManagerTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/
> Basic/FileManagerTest.cpp?rev=283856&r1=283855&r2=283856&view=diff
> ============================================================
> ==================
> --- cfe/trunk/unittests/Basic/FileManagerTest.cpp (original)
> +++ cfe/trunk/unittests/Basic/FileManagerTest.cpp Tue Oct 11 02:31:29 2016
> @@ -52,7 +52,7 @@ public:
> }
>
> // Implement FileSystemStatCache::getStat().
> - LookupResult getStat(const char *Path, FileData &Data, bool isFile,
> + LookupResult getStat(StringRef Path, FileData &Data, bool isFile,
> std::unique_ptr<vfs::File> *F,
> vfs::FileSystem &FS) override {
> if (StatCalls.count(Path) != 0) {
> @@ -82,14 +82,14 @@ TEST_F(FileManagerTest, getVirtualFileSe
>
> const DirectoryEntry *dir = file->getDir();
> ASSERT_TRUE(dir != nullptr);
> - EXPECT_STREQ(".", dir->getName());
> + EXPECT_EQ(".", dir->getName());
>
> file = manager.getVirtualFile("x/y/z.cpp", 42, 0);
> ASSERT_TRUE(file != nullptr);
>
> dir = file->getDir();
> ASSERT_TRUE(dir != nullptr);
> - EXPECT_STREQ("x/y", dir->getName());
> + EXPECT_EQ("x/y", dir->getName());
> }
>
> // Before any virtual file is added, no virtual directory exists.
> @@ -115,11 +115,11 @@ TEST_F(FileManagerTest, getVirtualFileCr
>
> const DirectoryEntry *dir = manager.getDirectory("virtual/dir");
> ASSERT_TRUE(dir != nullptr);
> - EXPECT_STREQ("virtual/dir", dir->getName());
> + EXPECT_EQ("virtual/dir", dir->getName());
>
> dir = manager.getDirectory("virtual");
> ASSERT_TRUE(dir != nullptr);
> - EXPECT_STREQ("virtual", dir->getName());
> + EXPECT_EQ("virtual", dir->getName());
> }
>
> // getFile() returns non-NULL if a real file exists at the given path.
> @@ -144,7 +144,7 @@ TEST_F(FileManagerTest, getFileReturnsVa
>
> const DirectoryEntry *dir = file->getDir();
> ASSERT_TRUE(dir != nullptr);
> - EXPECT_STREQ("/tmp", dir->getName());
> + EXPECT_EQ("/tmp", dir->getName());
>
> #ifdef LLVM_ON_WIN32
> file = manager.getFile(FileName);
> @@ -152,7 +152,7 @@ TEST_F(FileManagerTest, getFileReturnsVa
>
> dir = file->getDir();
> ASSERT_TRUE(dir != NULL);
> - EXPECT_STREQ(DirName, dir->getName());
> + EXPECT_EQ(DirName, dir->getName());
> #endif
> }
>
> @@ -168,7 +168,7 @@ TEST_F(FileManagerTest, getFileReturnsVa
>
> const DirectoryEntry *dir = file->getDir();
> ASSERT_TRUE(dir != nullptr);
> - EXPECT_STREQ("virtual/dir", dir->getName());
> + EXPECT_EQ("virtual/dir", dir->getName());
> }
>
> // getFile() returns different FileEntries for different paths when
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161011/65ce9933/attachment-0001.html>
More information about the cfe-commits
mailing list