[cxx-interop] Support CxxStdlib overlay for libc++ on Linux

This teaches Swift to rebuild the CxxStdlib overlay module from its interface when using a C++ standard library that is not the platform default, specifically libc++ on Linux.

rdar://138838506
This commit is contained in:
Egor Zhdan
2024-11-18 18:17:00 +00:00
parent c1ff2c3392
commit 282f3b127b
6 changed files with 40 additions and 10 deletions

View File

@@ -2035,6 +2035,15 @@ InterfaceSubContextDelegateImpl::InterfaceSubContextDelegateImpl(
GenericArgs.push_back(
ArgSaver.save("-cxx-interoperability-mode=" + compatVersion));
if (!langOpts.isUsingPlatformDefaultCXXStdlib() &&
langOpts.CXXStdlib == CXXStdlibKind::Libcxx) {
genericSubInvocation.getLangOptions().CXXStdlib = CXXStdlibKind::Libcxx;
genericSubInvocation.getClangImporterOptions().ExtraArgs.push_back(
"-stdlib=libc++");
GenericArgs.push_back("-Xcc");
GenericArgs.push_back("-stdlib=libc++");
}
}
}