r331077 - Revert r329698 (and r329702).

Nico Weber via cfe-commits cfe-commits at lists.llvm.org
Sat Apr 28 15:20:37 PDT 2018


Looks like this helped :-/

http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/10262

On Fri, Apr 27, 2018, 4:33 PM Nico Weber via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: nico
> Date: Fri Apr 27 13:29:57 2018
> New Revision: 331077
>
> URL: http://llvm.org/viewvc/llvm-project?rev=331077&view=rev
> Log:
> 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.
>
> Modified:
>     cfe/trunk/lib/Basic/FileManager.cpp
>     cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp
>
> Modified: cfe/trunk/lib/Basic/FileManager.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/FileManager.cpp?rev=331077&r1=331076&r2=331077&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Basic/FileManager.cpp (original)
> +++ cfe/trunk/lib/Basic/FileManager.cpp Fri Apr 27 13:29:57 2018
> @@ -534,9 +534,23 @@ StringRef FileManager::getCanonicalName(
>
>    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;
>
> Modified: cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp?rev=331077&r1=331076&r2=331077&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp (original)
> +++ cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp Fri Apr 27
> 13:29:57 2018
> @@ -97,6 +97,24 @@ struct ModuleDependencyMMCallbacks : pub
>
>  }
>
> +// 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::attachTo
>  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(StringRe
>    // 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::getRealP
>    // 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 {
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180428/692e8b60/attachment-0001.html>


More information about the cfe-commits mailing list