llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Pierre Ossman (ThinLinc team) (CendioOssman) <details> <summary>Changes</summary> The current code did not work with a standard gcc cross-compiler layout, and there was a lot of internal confusion in the code about what different directories need to be tracked and where to track them. This tries to do some cleanup of this, trying to get closer to the primary gcc code in Gnu.cpp. Long term, it might be best to drop this duplication and make the MinGW toolchain use the same gcc handling code as the other gcc platforms. --- Patch is 32.08 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/155239.diff 16 Files Affected: - (modified) clang/lib/Driver/ToolChains/MinGW.cpp (+95-54) - (modified) clang/lib/Driver/ToolChains/MinGW.h (+1) - (removed) clang/test/Driver/Inputs/mingw_fedora_tree/usr/lib/gcc/x86_64-w64-mingw32ucrt/12.2.1/include-fixed/.keep () - (removed) clang/test/Driver/Inputs/mingw_fedora_tree/usr/x86_64-w64-mingw32ucrt/sys-root/mingw/include/.keep () - (removed) clang/test/Driver/Inputs/mingw_fedora_tree/usr/x86_64-w64-mingw32ucrt/sys-root/mingw/include/c++/backward/.keep () - (removed) clang/test/Driver/Inputs/mingw_fedora_tree/usr/x86_64-w64-mingw32ucrt/sys-root/mingw/include/c++/x86_64-w64-mingw32ucrt/.keep () - (removed) clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/i686-w64-mingw32/include/c++/backward/.keep () - (removed) clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/i686-w64-mingw32/include/c++/i686-w64-mingw32/.keep () - (removed) clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/lib/gcc/i686-w64-mingw32/4.9.1/include-fixed/.keep () - (removed) clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/lib/gcc/i686-w64-mingw32/4.9.1/include/.keep () - (removed) clang/test/Driver/Inputs/mingw_opensuse_tree/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/include-fixed/.keep () - (removed) clang/test/Driver/Inputs/mingw_opensuse_tree/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/include/c++/backward/.keep () - (removed) clang/test/Driver/Inputs/mingw_opensuse_tree/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/include/c++/x86_64-w64-mingw32/.keep () - (removed) clang/test/Driver/Inputs/mingw_opensuse_tree/usr/x86_64-w64-mingw32/sys-root/mingw/include/.keep () - (modified) clang/test/Driver/mingw-sysroot.cpp (+3-28) - (modified) clang/test/Driver/mingw.cpp (+16-45) ``````````diff diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index 1bb9bcfe6aab2..999a9e1e180d9 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -422,6 +422,12 @@ static llvm::Triple getLiteralTriple(const Driver &D, const llvm::Triple &T) { } void toolchains::MinGW::findGccLibDir(const llvm::Triple &LiteralTriple) { + std::string InstallBase = + std::string(llvm::sys::path::parent_path(getDriver().Dir)); + llvm::SmallVector<llvm::SmallString<32>, 3> BaseNames; + BaseNames.emplace_back(Base); + BaseNames.emplace_back(InstallBase); + BaseNames.emplace_back("/usr"); llvm::SmallVector<llvm::SmallString<32>, 5> SubdirNames; SubdirNames.emplace_back(LiteralTriple.str()); SubdirNames.emplace_back(getTriple().str()); @@ -430,46 +436,75 @@ void toolchains::MinGW::findGccLibDir(const llvm::Triple &LiteralTriple) { SubdirNames.emplace_back(getTriple().getArchName()); SubdirNames.back() += "-w64-mingw32ucrt"; SubdirNames.emplace_back("mingw32"); - if (SubdirName.empty()) { - SubdirName = getTriple().getArchName(); - SubdirName += "-w64-mingw32"; + TripleDirName = getTriple().getArchName(); + TripleDirName += "-w64-mingw32"; + // FIXME: Should pick the newest version + for (StringRef CandidateBase : BaseNames) { + // lib: Arch Linux, Ubuntu, Windows + // lib64: openSUSE Linux + for (StringRef CandidateLib : {"lib", "lib64"}) { + for (StringRef CandidateTriple : SubdirNames) { + llvm::SmallString<1024> LibDir(CandidateBase); + llvm::sys::path::append(LibDir, CandidateLib, "gcc", CandidateTriple); + if (findGccVersion(LibDir, GccLibDir, Ver, GccVer)) { + llvm::SmallString<1024> ParentLib(LibDir); + llvm::sys::path::append(ParentLib, "..", ".."); + GccParentLibPath = ParentLib.str(); + TripleDirName = std::string(CandidateTriple); + return; + } + } + } } - // lib: Arch Linux, Ubuntu, Windows - // lib64: openSUSE Linux + // Let's try to find it relative a decorated gcc binary for (StringRef CandidateLib : {"lib", "lib64"}) { - for (StringRef CandidateSysroot : SubdirNames) { - llvm::SmallString<1024> LibDir(Base); - llvm::sys::path::append(LibDir, CandidateLib, "gcc", CandidateSysroot); + for (StringRef CandidateTriple : SubdirNames) { + llvm::ErrorOr<std::string> GPPName = + llvm::sys::findProgramByName(CandidateTriple.str() + "-gcc"); + if (!GPPName) + continue; + llvm::SmallString<1024> LibDir; + llvm::sys::path::append(LibDir, llvm::sys::path::parent_path(llvm::sys::path::parent_path(GPPName.get()))); + llvm::sys::path::append(LibDir, CandidateLib, "gcc", CandidateTriple); if (findGccVersion(LibDir, GccLibDir, Ver, GccVer)) { - SubdirName = std::string(CandidateSysroot); + llvm::SmallString<1024> ParentLib(LibDir); + llvm::sys::path::append(ParentLib, "..", ".."); + GccParentLibPath = ParentLib.str(); + TripleDirName = std::string(CandidateTriple); return; } } } } -static llvm::ErrorOr<std::string> findGcc(const llvm::Triple &LiteralTriple, - const llvm::Triple &T) { +static llvm::ErrorOr<std::string> findGccRelativeSysroot( + const llvm::Triple &LiteralTriple, const llvm::Triple &T) { llvm::SmallVector<llvm::SmallString<32>, 5> Gccs; Gccs.emplace_back(LiteralTriple.str()); - Gccs.back() += "-gcc"; Gccs.emplace_back(T.str()); - Gccs.back() += "-gcc"; Gccs.emplace_back(T.getArchName()); - Gccs.back() += "-w64-mingw32-gcc"; + Gccs.back() += "-w64-mingw32"; Gccs.emplace_back(T.getArchName()); - Gccs.back() += "-w64-mingw32ucrt-gcc"; - Gccs.emplace_back("mingw32-gcc"); + Gccs.back() += "-w64-mingw32ucrt"; + Gccs.emplace_back("mingw32"); // Please do not add "gcc" here - for (StringRef CandidateGcc : Gccs) - if (llvm::ErrorOr<std::string> GPPName = llvm::sys::findProgramByName(CandidateGcc)) - return GPPName; + for (StringRef CandidateGcc : Gccs) { + llvm::ErrorOr<std::string> GPPName = + llvm::sys::findProgramByName(CandidateGcc.str() + "-gcc"); + llvm::SmallString<1024> SysrootDir; + if (!GPPName) + continue; + llvm::sys::path::append(SysrootDir, llvm::sys::path::parent_path(llvm::sys::path::parent_path(GPPName.get()))); + llvm::sys::path::append(SysrootDir, CandidateGcc); + if (llvm::sys::fs::is_directory(SysrootDir)) + return SysrootDir.str().str(); + } return make_error_code(std::errc::no_such_file_or_directory); } static llvm::ErrorOr<std::string> findClangRelativeSysroot(const Driver &D, const llvm::Triple &LiteralTriple, - const llvm::Triple &T, std::string &SubdirName) { + const llvm::Triple &T) { llvm::SmallVector<llvm::SmallString<32>, 4> Subdirs; Subdirs.emplace_back(LiteralTriple.str()); Subdirs.emplace_back(T.str()); @@ -481,7 +516,8 @@ findClangRelativeSysroot(const Driver &D, const llvm::Triple &LiteralTriple, StringRef Sep = llvm::sys::path::get_separator(); for (StringRef CandidateSubdir : Subdirs) { if (llvm::sys::fs::is_directory(ClangRoot + Sep + CandidateSubdir)) { - SubdirName = std::string(CandidateSubdir); + if (llvm::sys::fs::is_directory(ClangRoot + Sep + CandidateSubdir + Sep + "sys-root")) + return (ClangRoot + Sep + CandidateSubdir + Sep + "sys-root").str(); return (ClangRoot + Sep + CandidateSubdir).str(); } } @@ -510,41 +546,38 @@ toolchains::MinGW::MinGW(const Driver &D, const llvm::Triple &Triple, llvm::Triple LiteralTriple = getLiteralTriple(D, getTriple()); if (getDriver().SysRoot.size()) Base = getDriver().SysRoot; - // Look for <clang-bin>/../<triplet>; if found, use <clang-bin>/.. as the - // base as it could still be a base for a gcc setup with libgcc. + // Look for <clang-bin>/../<triplet> else if (llvm::ErrorOr<std::string> TargetSubdir = findClangRelativeSysroot( - getDriver(), LiteralTriple, getTriple(), SubdirName)) - Base = std::string(llvm::sys::path::parent_path(TargetSubdir.get())); + getDriver(), LiteralTriple, getTriple())) + Base = TargetSubdir.get(); // If the install base of Clang seems to have mingw sysroot files directly // in the toplevel include and lib directories, use this as base instead of // looking for a triple prefixed GCC in the path. else if (looksLikeMinGWSysroot(InstallBase)) Base = InstallBase; - else if (llvm::ErrorOr<std::string> GPPName = - findGcc(LiteralTriple, getTriple())) - Base = std::string(llvm::sys::path::parent_path( - llvm::sys::path::parent_path(GPPName.get()))); + else if (llvm::ErrorOr<std::string> TargetSubdir = + findGccRelativeSysroot(LiteralTriple, getTriple())) + Base = TargetSubdir.get(); else Base = InstallBase; Base += llvm::sys::path::get_separator(); findGccLibDir(LiteralTriple); - TripleDirName = SubdirName; // GccLibDir must precede Base/lib so that the // correct crtbegin.o ,cetend.o would be found. getFilePaths().push_back(GccLibDir); + std::string CandidateGccLibDir = GccParentLibPath + "/../" + TripleDirName + "/lib"; + if (getDriver().getVFS().exists(CandidateGccLibDir)) + getFilePaths().push_back(CandidateGccLibDir); - // openSUSE/Fedora - std::string CandidateSubdir = SubdirName + "/sys-root/mingw"; - if (getDriver().getVFS().exists(Base + CandidateSubdir)) + // openSUSE/Fedora/Gentoo + std::string CandidateSubdir = "mingw"; + if (getDriver().getVFS().exists(Base + CandidateSubdir)) { SubdirName = CandidateSubdir; + SubdirName += llvm::sys::path::get_separator(); + } - getFilePaths().push_back( - (Base + SubdirName + llvm::sys::path::get_separator() + "lib").str()); - - // Gentoo - getFilePaths().push_back( - (Base + SubdirName + llvm::sys::path::get_separator() + "mingw/lib").str()); + getFilePaths().push_back(Base + SubdirName + "lib"); // Only include <base>/lib if we're not cross compiling (not even for // windows->windows to a different arch), or if the sysroot has been set @@ -704,13 +737,10 @@ void toolchains::MinGW::AddClangSystemIncludeArgs(const ArgList &DriverArgs, if (DriverArgs.hasArg(options::OPT_nostdlibinc)) return; - addSystemInclude(DriverArgs, CC1Args, - Base + SubdirName + llvm::sys::path::get_separator() + - "include"); + addSystemInclude(DriverArgs, CC1Args, Base + SubdirName + "include"); // Gentoo - addSystemInclude(DriverArgs, CC1Args, - Base + SubdirName + llvm::sys::path::get_separator() + "usr/include"); + addSystemInclude(DriverArgs, CC1Args, Base + SubdirName + "usr/include"); // Only include <base>/include if we're not cross compiling (but do allow it // if we're on Windows and building for Windows on another architecture), @@ -789,7 +819,7 @@ void toolchains::MinGW::AddClangCXXStdlibIncludeArgs( if (getDriver().getVFS().exists(TargetDir)) addSystemInclude(DriverArgs, CC1Args, TargetDir); addSystemInclude(DriverArgs, CC1Args, - Base + SubdirName + Slash + "include" + Slash + "c++" + + Base + SubdirName + "include" + Slash + "c++" + Slash + "v1"); addSystemInclude(DriverArgs, CC1Args, Base + "include" + Slash + "c++" + Slash + "v1"); @@ -797,7 +827,7 @@ void toolchains::MinGW::AddClangCXXStdlibIncludeArgs( } case ToolChain::CST_Libstdcxx: - llvm::SmallVector<llvm::SmallString<1024>, 7> CppIncludeBases; + llvm::SmallVector<llvm::SmallString<1024>, 9> CppIncludeBases; CppIncludeBases.emplace_back(Base); llvm::sys::path::append(CppIncludeBases[0], SubdirName, "include", "c++"); CppIncludeBases.emplace_back(Base); @@ -805,22 +835,33 @@ void toolchains::MinGW::AddClangCXXStdlibIncludeArgs( Ver); CppIncludeBases.emplace_back(Base); llvm::sys::path::append(CppIncludeBases[2], "include", "c++", Ver); + CppIncludeBases.emplace_back(GccParentLibPath); + llvm::sys::path::append(CppIncludeBases[3], "..", TripleDirName); + llvm::sys::path::append(CppIncludeBases[3], "include", "c++", GccVer.Text); + CppIncludeBases.emplace_back(GccParentLibPath); + llvm::sys::path::append(CppIncludeBases[4], + "gcc", TripleDirName, GccVer.Text); + llvm::sys::path::append(CppIncludeBases[4], "include", "c++"); + CppIncludeBases.emplace_back(GccParentLibPath); + llvm::sys::path::append(CppIncludeBases[5], + "..", "include", "c++", GccVer.Text); CppIncludeBases.emplace_back(GccLibDir); - llvm::sys::path::append(CppIncludeBases[3], "include", "c++"); - CppIncludeBases.emplace_back(GccLibDir); - llvm::sys::path::append(CppIncludeBases[4], "include", + llvm::sys::path::append(CppIncludeBases[6], "include", "g++-v" + GccVer.Text); CppIncludeBases.emplace_back(GccLibDir); - llvm::sys::path::append(CppIncludeBases[5], "include", + llvm::sys::path::append(CppIncludeBases[7], "include", "g++-v" + GccVer.MajorStr + "." + GccVer.MinorStr); CppIncludeBases.emplace_back(GccLibDir); - llvm::sys::path::append(CppIncludeBases[6], "include", + llvm::sys::path::append(CppIncludeBases[8], "include", "g++-v" + GccVer.MajorStr); for (auto &CppIncludeBase : CppIncludeBases) { + if (!getDriver().getVFS().exists(CppIncludeBase)) + continue; addSystemInclude(DriverArgs, CC1Args, CppIncludeBase); CppIncludeBase += Slash; addSystemInclude(DriverArgs, CC1Args, CppIncludeBase + TripleDirName); addSystemInclude(DriverArgs, CC1Args, CppIncludeBase + "backward"); + break; } break; } @@ -830,19 +871,19 @@ static bool testTriple(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) { // If an explicit sysroot is set, that will be used and we shouldn't try to // detect anything else. - std::string SubdirName; if (D.SysRoot.size()) return true; llvm::Triple LiteralTriple = getLiteralTriple(D, Triple); std::string InstallBase = std::string(llvm::sys::path::parent_path(D.Dir)); if (llvm::ErrorOr<std::string> TargetSubdir = - findClangRelativeSysroot(D, LiteralTriple, Triple, SubdirName)) + findClangRelativeSysroot(D, LiteralTriple, Triple)) return true; // If the install base itself looks like a mingw sysroot, we'll use that // - don't use any potentially unrelated gcc to influence what triple to use. if (looksLikeMinGWSysroot(InstallBase)) return false; - if (llvm::ErrorOr<std::string> GPPName = findGcc(LiteralTriple, Triple)) + if (llvm::ErrorOr<std::string> TargetSubdir = + findGccRelativeSysroot(LiteralTriple, Triple)) return true; // If we neither found a colocated sysroot or a matching gcc executable, // conclude that we can't know if this is the correct spelling of the triple. diff --git a/clang/lib/Driver/ToolChains/MinGW.h b/clang/lib/Driver/ToolChains/MinGW.h index 1730da48cd434..dad72fe1e90b3 100644 --- a/clang/lib/Driver/ToolChains/MinGW.h +++ b/clang/lib/Driver/ToolChains/MinGW.h @@ -109,6 +109,7 @@ class LLVM_LIBRARY_VISIBILITY MinGW : public ToolChain { std::string Base; std::string GccLibDir; + std::string GccParentLibPath; clang::driver::toolchains::Generic_GCC::GCCVersion GccVer; std::string Ver; std::string SubdirName; diff --git a/clang/test/Driver/Inputs/mingw_fedora_tree/usr/lib/gcc/x86_64-w64-mingw32ucrt/12.2.1/include-fixed/.keep b/clang/test/Driver/Inputs/mingw_fedora_tree/usr/lib/gcc/x86_64-w64-mingw32ucrt/12.2.1/include-fixed/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_fedora_tree/usr/x86_64-w64-mingw32ucrt/sys-root/mingw/include/.keep b/clang/test/Driver/Inputs/mingw_fedora_tree/usr/x86_64-w64-mingw32ucrt/sys-root/mingw/include/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_fedora_tree/usr/x86_64-w64-mingw32ucrt/sys-root/mingw/include/c++/backward/.keep b/clang/test/Driver/Inputs/mingw_fedora_tree/usr/x86_64-w64-mingw32ucrt/sys-root/mingw/include/c++/backward/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_fedora_tree/usr/x86_64-w64-mingw32ucrt/sys-root/mingw/include/c++/x86_64-w64-mingw32ucrt/.keep b/clang/test/Driver/Inputs/mingw_fedora_tree/usr/x86_64-w64-mingw32ucrt/sys-root/mingw/include/c++/x86_64-w64-mingw32ucrt/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/i686-w64-mingw32/include/c++/backward/.keep b/clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/i686-w64-mingw32/include/c++/backward/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/i686-w64-mingw32/include/c++/i686-w64-mingw32/.keep b/clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/i686-w64-mingw32/include/c++/i686-w64-mingw32/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/lib/gcc/i686-w64-mingw32/4.9.1/include-fixed/.keep b/clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/lib/gcc/i686-w64-mingw32/4.9.1/include-fixed/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/lib/gcc/i686-w64-mingw32/4.9.1/include/.keep b/clang/test/Driver/Inputs/mingw_mingw_builds_tree/mingw32/lib/gcc/i686-w64-mingw32/4.9.1/include/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_opensuse_tree/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/include-fixed/.keep b/clang/test/Driver/Inputs/mingw_opensuse_tree/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/include-fixed/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_opensuse_tree/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/include/c++/backward/.keep b/clang/test/Driver/Inputs/mingw_opensuse_tree/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/include/c++/backward/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_opensuse_tree/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/include/c++/x86_64-w64-mingw32/.keep b/clang/test/Driver/Inputs/mingw_opensuse_tree/usr/lib64/gcc/x86_64-w64-mingw32/5.1.0/include/c++/x86_64-w64-mingw32/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/Inputs/mingw_opensuse_tree/usr/x86_64-w64-mingw32/sys-root/mingw/include/.keep b/clang/test/Driver/Inputs/mingw_opensuse_tree/usr/x86_64-w64-mingw32/sys-root/mingw/include/.keep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/mingw-sysroot.cpp b/clang/test/Driver/mingw-sysroot.cpp index 0ba2f336fd2e0..47e6c7f8ba600 100644 --- a/clang/test/Driver/mingw-sysroot.cpp +++ b/clang/test/Driver/mingw-sysroot.cpp @@ -34,12 +34,9 @@ // cross toolchains installed in /usr. // RUN: env "PATH=%t.dir/testroot-gcc/bin:%PATH%" %clang --target=x86_64-w64-mingw32 -rtlib=platform -stdlib=libstdc++ --sysroot="" -c -### %s 2>&1 | FileCheck -check-prefix=CHECK_TESTROOT_GCC %s --implicit-check-not="\"{{.*}}/testroot-gcc{{/|\\\\}}include\"" -// CHECK_TESTROOT_GCC: "-internal-isystem" "[[BASE:[^"]+]]/testroot-gcc{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}10.2-posix{{/|\\\\}}include{{/|\\\\}}c++" -// CHECK_TESTROOT_GCC-SAME: {{^}} "-internal-isystem" "[[BASE]]/testroot-gcc{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}10.2-posix{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}x86_64-w64-mingw32" -// CHECK_TESTROOT_GCC-SAME: {{^}} "-internal-isystem" "[[BASE]]/testroot-gcc{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}10.2-posix{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}backward" -// CHECK_TESTROOT_GCC: "-internal-isystem" "[[BASE]]/testroot-gcc{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}10.2-posix{{/|\\\\}}include{{/|\\\\}}g++-v10.2-posix" -// CHECK_TESTROOT_GCC: "-internal-isystem" "[[BASE]]/testroot-gcc{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}10.2-posix{{/|\\\\}}include{{/|\\\\}}g++-v10.2" -// CHECK_TESTROOT_GCC: "-internal-isystem" "[[BASE]]/testroot-gcc{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}10.2-posix{{/|\\\\}}include{{/|\\\\}}g++-v10" +// CHECK_TESTROOT_GCC: "-internal-isystem" "[[BASE:[^"]+]]/testroot-gcc{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}..{{/|\\\\}}..{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}10.2-posix{{/|\\\\}}include{{/|\\\\}}c++" +// CHECK_TESTROOT_GCC-SAME: {{^}} "-internal-isystem" "[[BASE]]/testroot-gcc{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}..{{/|\\\\}}..{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}10.2-posix{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}x86_64-w64-mingw32" +// CHECK_TESTROOT_GCC-SAME: {{^}} "-internal-isystem" "[[BASE]]/testroot-gcc{{/|\\\\}}lib{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}..{{/|\\\\}}..{{/|\\\\}}gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}10.2-posix{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}backward" // CHECK_TESTROOT_GCC: "-internal-isystem" "[[BASE]]/testroot-gcc{{/|\\\\}}x86_64-w64-mingw32{{/|\\\\}}include" @@ -66,28 +63,6 @@ // RUN: env "PATH=%t.dir/testroot-gcc/bin:%PATH%" %t.dir/testroot-gcc/bin/x86_64-w64-mingw32-clang --target=x86_64-w64-mingw32 -rtlib=platform -stdlib=libstdc++ --sysroot="" -c -### %s 2>&1 | FileCheck -check-prefix=CHECK_TESTROOT_GCC %s -// If we're executing clang from a directory with what looks like a mingw sysroot, -// with headers in <base>/include and libs in <base>/lib, use that rather than looking -// for another GCC in the path. -// -// Note, this test has a surprising quirk: We're testing with an install directory, -// testroot-clang-native, which lacks the "x86_64-w64-mingw32" subdirectory, it only -// has the include and lib subdirecto... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/155239 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits