Merge pull request #78556 from hjyamauchi/compilerperf

Sink unnecessary steps for Windows in CompilerInvocation::computeCXXS…
This commit is contained in:
Hiroshi Yamauchi
2025-01-13 13:23:34 -08:00
committed by GitHub

View File

@@ -364,26 +364,6 @@ setBridgingHeaderFromFrontendOptions(ClangImporterOptions &ImporterOpts,
}
void CompilerInvocation::computeCXXStdlibOptions() {
auto [clangDriver, clangDiagEngine] =
ClangImporter::createClangDriver(LangOpts, ClangImporterOpts);
auto clangDriverArgs = ClangImporter::createClangArgs(
ClangImporterOpts, SearchPathOpts, clangDriver);
auto &clangToolchain =
clangDriver.getToolChain(clangDriverArgs, LangOpts.Target);
auto cxxStdlibKind = clangToolchain.GetCXXStdlibType(clangDriverArgs);
auto cxxDefaultStdlibKind = clangToolchain.GetDefaultCXXStdlibType();
auto toCXXStdlibKind =
[](clang::driver::ToolChain::CXXStdlibType clangCXXStdlibType)
-> CXXStdlibKind {
switch (clangCXXStdlibType) {
case clang::driver::ToolChain::CST_Libcxx:
return CXXStdlibKind::Libcxx;
case clang::driver::ToolChain::CST_Libstdcxx:
return CXXStdlibKind::Libstdcxx;
}
};
// The MSVC driver in Clang is not aware of the C++ stdlib, and currently
// always assumes libstdc++, which is incorrect: the Microsoft stdlib is
// normally used.
@@ -393,8 +373,27 @@ void CompilerInvocation::computeCXXStdlibOptions() {
// (see https://reviews.llvm.org/D101479).
LangOpts.CXXStdlib = CXXStdlibKind::Msvcprt;
LangOpts.PlatformDefaultCXXStdlib = CXXStdlibKind::Msvcprt;
}
if (LangOpts.Target.isOSLinux() || LangOpts.Target.isOSDarwin()) {
} else if (LangOpts.Target.isOSLinux() || LangOpts.Target.isOSDarwin()) {
auto [clangDriver, clangDiagEngine] =
ClangImporter::createClangDriver(LangOpts, ClangImporterOpts);
auto clangDriverArgs = ClangImporter::createClangArgs(
ClangImporterOpts, SearchPathOpts, clangDriver);
auto &clangToolchain =
clangDriver.getToolChain(clangDriverArgs, LangOpts.Target);
auto cxxStdlibKind = clangToolchain.GetCXXStdlibType(clangDriverArgs);
auto cxxDefaultStdlibKind = clangToolchain.GetDefaultCXXStdlibType();
auto toCXXStdlibKind =
[](clang::driver::ToolChain::CXXStdlibType clangCXXStdlibType)
-> CXXStdlibKind {
switch (clangCXXStdlibType) {
case clang::driver::ToolChain::CST_Libcxx:
return CXXStdlibKind::Libcxx;
case clang::driver::ToolChain::CST_Libstdcxx:
return CXXStdlibKind::Libstdcxx;
}
};
LangOpts.CXXStdlib = toCXXStdlibKind(cxxStdlibKind);
LangOpts.PlatformDefaultCXXStdlib = toCXXStdlibKind(cxxDefaultStdlibKind);
}