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@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits