@@ -364,26 +364,6 @@ setBridgingHeaderFromFrontendOptions(ClangImporterOptions &ImporterOpts,
364364}
365365
366366void CompilerInvocation::computeCXXStdlibOptions () {
367- auto [clangDriver, clangDiagEngine] =
368- ClangImporter::createClangDriver (LangOpts, ClangImporterOpts);
369- auto clangDriverArgs = ClangImporter::createClangArgs (
370- ClangImporterOpts, SearchPathOpts, clangDriver);
371- auto &clangToolchain =
372- clangDriver.getToolChain (clangDriverArgs, LangOpts.Target );
373- auto cxxStdlibKind = clangToolchain.GetCXXStdlibType (clangDriverArgs);
374- auto cxxDefaultStdlibKind = clangToolchain.GetDefaultCXXStdlibType ();
375-
376- auto toCXXStdlibKind =
377- [](clang::driver::ToolChain::CXXStdlibType clangCXXStdlibType)
378- -> CXXStdlibKind {
379- switch (clangCXXStdlibType) {
380- case clang::driver::ToolChain::CST_Libcxx:
381- return CXXStdlibKind::Libcxx;
382- case clang::driver::ToolChain::CST_Libstdcxx:
383- return CXXStdlibKind::Libstdcxx;
384- }
385- };
386-
387367 // The MSVC driver in Clang is not aware of the C++ stdlib, and currently
388368 // always assumes libstdc++, which is incorrect: the Microsoft stdlib is
389369 // normally used.
@@ -393,8 +373,27 @@ void CompilerInvocation::computeCXXStdlibOptions() {
393373 // (see https://reviews.llvm.org/D101479).
394374 LangOpts.CXXStdlib = CXXStdlibKind::Msvcprt;
395375 LangOpts.PlatformDefaultCXXStdlib = CXXStdlibKind::Msvcprt;
396- }
397- if (LangOpts.Target .isOSLinux () || LangOpts.Target .isOSDarwin ()) {
376+ } else if (LangOpts.Target .isOSLinux () || LangOpts.Target .isOSDarwin ()) {
377+ auto [clangDriver, clangDiagEngine] =
378+ ClangImporter::createClangDriver (LangOpts, ClangImporterOpts);
379+ auto clangDriverArgs = ClangImporter::createClangArgs (
380+ ClangImporterOpts, SearchPathOpts, clangDriver);
381+ auto &clangToolchain =
382+ clangDriver.getToolChain (clangDriverArgs, LangOpts.Target );
383+ auto cxxStdlibKind = clangToolchain.GetCXXStdlibType (clangDriverArgs);
384+ auto cxxDefaultStdlibKind = clangToolchain.GetDefaultCXXStdlibType ();
385+
386+ auto toCXXStdlibKind =
387+ [](clang::driver::ToolChain::CXXStdlibType clangCXXStdlibType)
388+ -> CXXStdlibKind {
389+ switch (clangCXXStdlibType) {
390+ case clang::driver::ToolChain::CST_Libcxx:
391+ return CXXStdlibKind::Libcxx;
392+ case clang::driver::ToolChain::CST_Libstdcxx:
393+ return CXXStdlibKind::Libstdcxx;
394+ }
395+ };
396+
398397 LangOpts.CXXStdlib = toCXXStdlibKind (cxxStdlibKind);
399398 LangOpts.PlatformDefaultCXXStdlib = toCXXStdlibKind (cxxDefaultStdlibKind);
400399 }
0 commit comments