Add a comment explaining differing Windows behavior.
authorSean Silva <chisophugis@gmail.com>
Thu, 30 Jul 2015 07:30:24 +0000 (07:30 +0000)
committerSean Silva <chisophugis@gmail.com>
Thu, 30 Jul 2015 07:30:24 +0000 (07:30 +0000)
llvm-svn: 243625

clang/lib/Basic/FileManager.cpp

index 209abad..4c84f1b 100644 (file)
@@ -568,7 +568,13 @@ StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) {
   SmallString<256> CanonicalNameBuf(CanonicalName);
   llvm::sys::fs::make_absolute(CanonicalNameBuf);
   llvm::sys::path::native(CanonicalNameBuf);
-  removeDotPaths(CanonicalNameBuf, true);
+  // We've run into needing to remove '..' here in the wild though, so
+  // remove it.
+  // On Windows, symlinks are significantly less prevalent, so removing
+  // '..' is pretty safe.
+  // Ideally we'd have an equivalent of `realpath` and could implement
+  // sys::fs::canonical across all the platforms.
+  removeDotPaths(CanonicalNameBuf, /*RemoveDotDot*/true);
   char *Mem = CanonicalNameStorage.Allocate<char>(CanonicalNameBuf.size());
   memcpy(Mem, CanonicalNameBuf.data(), CanonicalNameBuf.size());
   CanonicalName = StringRef(Mem, CanonicalNameBuf.size());