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/Frontend/ModuleDependencyCollector.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/Frontend/ModuleDependencyCollector.cpp')
-rw-r--r-- | clang/lib/Frontend/ModuleDependencyCollector.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/clang/lib/Frontend/ModuleDependencyCollector.cpp b/clang/lib/Frontend/ModuleDependencyCollector.cpp index 5fa0e13c770..3546508a89f 100644 --- a/clang/lib/Frontend/ModuleDependencyCollector.cpp +++ b/clang/lib/Frontend/ModuleDependencyCollector.cpp @@ -97,6 +97,24 @@ struct ModuleDependencyMMCallbacks : public ModuleMapCallbacks { } +// TODO: move this to Support/Path.h and check for HAVE_REALPATH? +static bool real_path(StringRef SrcPath, SmallVectorImpl<char> &RealPath) { +#ifdef LLVM_ON_UNIX + char CanonicalPath[PATH_MAX]; + + // TODO: emit a warning in case this fails...? + if (!realpath(SrcPath.str().c_str(), CanonicalPath)) + return false; + + SmallString<256> RPath(CanonicalPath); + RealPath.swap(RPath); + return true; +#else + // FIXME: Add support for systems without realpath. + return false; +#endif +} + void ModuleDependencyCollector::attachToASTReader(ASTReader &R) { R.addListener(llvm::make_unique<ModuleDependencyListener>(*this)); } @@ -111,7 +129,7 @@ void ModuleDependencyCollector::attachToPreprocessor(Preprocessor &PP) { static bool isCaseSensitivePath(StringRef Path) { SmallString<256> TmpDest = Path, UpperDest, RealDest; // Remove component traversals, links, etc. - if (llvm::sys::fs::real_path(Path, TmpDest)) + if (!real_path(Path, TmpDest)) return true; // Current default value in vfs.yaml Path = TmpDest; @@ -121,7 +139,7 @@ static bool isCaseSensitivePath(StringRef Path) { // already expects when sensitivity isn't setup. for (auto &C : Path) UpperDest.push_back(toUppercase(C)); - if (!llvm::sys::fs::real_path(UpperDest, RealDest) && Path.equals(RealDest)) + if (real_path(UpperDest, RealDest) && Path.equals(RealDest)) return false; return true; } @@ -171,7 +189,7 @@ bool ModuleDependencyCollector::getRealPath(StringRef SrcPath, // Computing the real path is expensive, cache the search through the // parent path directory. if (DirWithSymLink == SymLinkMap.end()) { - if (llvm::sys::fs::real_path(Dir, RealPath)) + if (!real_path(Dir, RealPath)) return false; SymLinkMap[Dir] = RealPath.str(); } else { |