Author: Nico Weber Date: 2020-10-03T14:22:53-04:00 New Revision: ba60dc0aa75e86165e260b2c08afafd1c394e95a
URL: https://github.com/llvm/llvm-project/commit/ba60dc0aa75e86165e260b2c08afafd1c394e95a DIFF: https://github.com/llvm/llvm-project/commit/ba60dc0aa75e86165e260b2c08afafd1c394e95a.diff LOG: Revert "[Driver] Move detectLibcxxIncludePath to ToolChain" This reverts commit e25bf2592060e7751f8b14522c97081ce2047175. Breaks tests on Windows, see comments on https://reviews.llvm.org/D88452 Added: Modified: clang/include/clang/Driver/ToolChain.h clang/lib/Driver/ToolChain.cpp clang/lib/Driver/ToolChains/Fuchsia.cpp clang/lib/Driver/ToolChains/Gnu.cpp Removed: clang/test/Driver/Inputs/basic_fuchsia_tree/include/c++/v1/.keep ################################################################################ diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h index db4c4a730232..7495e08fe6e6 100644 --- a/clang/include/clang/Driver/ToolChain.h +++ b/clang/include/clang/Driver/ToolChain.h @@ -575,9 +575,6 @@ class ToolChain { // given compilation arguments. virtual UnwindLibType GetUnwindLibType(const llvm::opt::ArgList &Args) const; - // Detect the highest available version of libc++ in base path. - virtual std::string detectLibcxxIncludePath(StringRef Base) const; - /// AddClangCXXStdlibIncludeArgs - Add the clang -cc1 level arguments to set /// the include paths to use for the given C++ standard library type. virtual void diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 8e98e3206880..8991216da676 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -924,29 +924,6 @@ void ToolChain::addExternCSystemIncludeIfExists(const ArgList &DriverArgs, } } -std::string ToolChain::detectLibcxxIncludePath(StringRef Base) const { - std::error_code EC; - int MaxVersion = 0; - std::string MaxVersionString; - for (llvm::vfs::directory_iterator LI = getVFS().dir_begin(Base, EC), LE; - !EC && LI != LE; LI = LI.increment(EC)) { - StringRef VersionText = llvm::sys::path::filename(LI->path()); - int Version; - if (VersionText[0] == 'v' && - !VersionText.slice(1, StringRef::npos).getAsInteger(10, Version)) { - if (Version > MaxVersion) { - MaxVersion = Version; - MaxVersionString = std::string(VersionText); - } - } - } - if (!MaxVersion) - return ""; - SmallString<128> P(Base); - llvm::sys::path::append(P, MaxVersionString); - return std::string(P.str()); -} - void ToolChain::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const { // Header search paths should be handled by each of the subclasses. diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp b/clang/lib/Driver/ToolChains/Fuchsia.cpp index e5f23ee38555..781179be39a3 100644 --- a/clang/lib/Driver/ToolChains/Fuchsia.cpp +++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp @@ -319,8 +319,8 @@ void Fuchsia::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, switch (GetCXXStdlibType(DriverArgs)) { case ToolChain::CST_Libcxx: { SmallString<128> P(getDriver().Dir); - llvm::sys::path::append(P, "..", "include", "c++"); - addSystemInclude(DriverArgs, CC1Args, detectLibcxxIncludePath(P.str())); + llvm::sys::path::append(P, "..", "include", "c++", "v1"); + addSystemInclude(DriverArgs, CC1Args, P.str()); break; } diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 3778b6f297ed..f3843685a522 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -2877,11 +2877,31 @@ void Generic_GCC::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, } } +static std::string DetectLibcxxIncludePath(llvm::vfs::FileSystem &vfs, + StringRef base) { + std::error_code EC; + int MaxVersion = 0; + std::string MaxVersionString; + for (llvm::vfs::directory_iterator LI = vfs.dir_begin(base, EC), LE; + !EC && LI != LE; LI = LI.increment(EC)) { + StringRef VersionText = llvm::sys::path::filename(LI->path()); + int Version; + if (VersionText[0] == 'v' && + !VersionText.slice(1, StringRef::npos).getAsInteger(10, Version)) { + if (Version > MaxVersion) { + MaxVersion = Version; + MaxVersionString = std::string(VersionText); + } + } + } + return MaxVersion ? (base + "/" + MaxVersionString).str() : ""; +} + void Generic_GCC::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const { auto AddIncludePath = [&](std::string Path) { - std::string IncludePath = detectLibcxxIncludePath(Path); + std::string IncludePath = DetectLibcxxIncludePath(getVFS(), Path); if (IncludePath.empty() || !getVFS().exists(IncludePath)) return false; addSystemInclude(DriverArgs, CC1Args, IncludePath); diff --git a/clang/test/Driver/Inputs/basic_fuchsia_tree/include/c++/v1/.keep b/clang/test/Driver/Inputs/basic_fuchsia_tree/include/c++/v1/.keep deleted file mode 100644 index e69de29bb2d1..000000000000 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits