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