aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Basic/FileManager.cpp
diff options
context:
space:
mode:
authorSean Silva <chisophugis@gmail.com>2015-07-30 07:30:24 +0000
committerSean Silva <chisophugis@gmail.com>2015-07-30 07:30:24 +0000
commitde3816655a61c2a575671ccdcb9c8f602dfd4706 (patch)
treeb098b43d5d4972dfd4e5fb9bc559110873da5363 /clang/lib/Basic/FileManager.cpp
parent5a45222745ef8334405979986335c05b1e4dcaab (diff)
downloadllvm-de3816655a61c2a575671ccdcb9c8f602dfd4706.zip
llvm-de3816655a61c2a575671ccdcb9c8f602dfd4706.tar.gz
llvm-de3816655a61c2a575671ccdcb9c8f602dfd4706.tar.bz2
Add a comment explaining differing Windows behavior.
llvm-svn: 243625
Diffstat (limited to 'clang/lib/Basic/FileManager.cpp')
-rw-r--r--clang/lib/Basic/FileManager.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp
index 209abad..4c84f1b 100644
--- a/clang/lib/Basic/FileManager.cpp
+++ b/clang/lib/Basic/FileManager.cpp
@@ -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());