]> granicus.if.org Git - clang/commitdiff
Revert r132539 for now, "My testing shows that function stat has no problem with...
authorNAKAMURA Takumi <geek4civic@gmail.com>
Thu, 17 Nov 2011 06:16:05 +0000 (06:16 +0000)
committerNAKAMURA Takumi <geek4civic@gmail.com>
Thu, 17 Nov 2011 06:16:05 +0000 (06:16 +0000)
It caused PR10331. MSVCRT stat() cannot strip trailing '/'. (can '\')

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144884 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/FileManager.cpp

index 69e65bc38ad7bec64b04f52f4875834d897e4817..274a9a1d25786f450ffa4fabc559e611867a3d9c 100644 (file)
@@ -265,6 +265,12 @@ void FileManager::addAncestorsAsVirtualDirs(StringRef Path) {
 ///
 const DirectoryEntry *FileManager::getDirectory(StringRef DirName,
                                                 bool CacheFailure) {
+  // stat doesn't like trailing separators.
+  // At least, on Win32 MSVCRT, stat() cannot strip trailing '/'.
+  // (though it can strip '\\')
+  if (DirName.size() > 1 && llvm::sys::path::is_separator(DirName.back()))
+    DirName = DirName.substr(0, DirName.size()-1);
+
   ++NumDirLookups;
   llvm::StringMapEntry<DirectoryEntry *> &NamedDirEnt =
     SeenDirEntries.GetOrCreateValue(DirName);