diff options
author | Nico Weber <nicolasweber@gmx.de> | 2018-04-27 20:29:57 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2018-04-27 20:29:57 +0000 |
commit | 6bc635ef56b9589a70e87737e788d9895e3cd0e4 (patch) | |
tree | f168ff40618cffbc1848aed4d795f9720327ff63 /clang/lib/Basic/FileManager.cpp | |
parent | a19ee7d7b63453f612f162de0be001ec384c2174 (diff) | |
download | bcm5719-llvm-6bc635ef56b9589a70e87737e788d9895e3cd0e4.tar.gz bcm5719-llvm-6bc635ef56b9589a70e87737e788d9895e3cd0e4.zip |
Revert r329698 (and r329702).
Speculative. ClangMoveTests started failing on
http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/9958
after this change. I can't reproduce on my machine, let's see
if it was due to this change.
llvm-svn: 331077
Diffstat (limited to 'clang/lib/Basic/FileManager.cpp')
-rw-r--r-- | clang/lib/Basic/FileManager.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp index 6fc00d9f413..719b2f66515 100644 --- a/clang/lib/Basic/FileManager.cpp +++ b/clang/lib/Basic/FileManager.cpp @@ -534,9 +534,23 @@ StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) { StringRef CanonicalName(Dir->getName()); - SmallString<256> CanonicalNameBuf; - if (!llvm::sys::fs::real_path(Dir->getName(), CanonicalNameBuf)) +#ifdef LLVM_ON_UNIX + char CanonicalNameBuf[PATH_MAX]; + if (realpath(Dir->getName().str().c_str(), CanonicalNameBuf)) CanonicalName = StringRef(CanonicalNameBuf).copy(CanonicalNameStorage); +#else + SmallString<256> CanonicalNameBuf(CanonicalName); + llvm::sys::fs::make_absolute(CanonicalNameBuf); + llvm::sys::path::native(CanonicalNameBuf); + // 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. + llvm::sys::path::remove_dots(CanonicalNameBuf, /* remove_dot_dot */ true); + CanonicalName = StringRef(CanonicalNameBuf).copy(CanonicalNameStorage); +#endif CanonicalDirNames.insert(std::make_pair(Dir, CanonicalName)); return CanonicalName; |