Skip to content

Commit c223dce

Browse files
committed
hack: cygwin: define _GLIBCXX_USE_CXX11_ABI to 1 if not previously defined
work around llvm#135910 see also msys2/MSYS2-packages#5329
1 parent a86450e commit c223dce

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

clang/lib/Driver/ToolChains/Cygwin.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,21 @@ void Cygwin::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
100100
addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
101101
addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include/w32api");
102102
}
103+
104+
void Cygwin::addClangTargetOptions(const ArgList &DriverArgs,
105+
ArgStringList &CC1Args,
106+
Action::OffloadKind) const {
107+
auto findMacroDefinition = [&](const std::string &Macro) {
108+
auto MacroDefs = DriverArgs.getAllArgValues(options::OPT_D);
109+
if (MacroDefs.empty())
110+
return false;
111+
std::string MacroEquals(Macro + '=');
112+
return llvm::any_of(MacroDefs, [&](const std::string &M) {
113+
return M == Macro || M.rfind(MacroEquals, 0) != std::string::npos;
114+
});
115+
};
116+
117+
if (getDriver().CCCIsCXX() &&
118+
!findMacroDefinition("_GLIBCXX_USE_CXX11_ABI"))
119+
CC1Args.push_back("-D_GLIBCXX_USE_CXX11_ABI=1");
120+
}

clang/lib/Driver/ToolChains/Cygwin.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ class LLVM_LIBRARY_VISIBILITY Cygwin : public Generic_GCC {
2424
void
2525
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
2626
llvm::opt::ArgStringList &CC1Args) const override;
27+
28+
void
29+
addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
30+
llvm::opt::ArgStringList &CC1Args,
31+
Action::OffloadKind DeviceOffloadKind) const override;
2732
};
2833

2934
} // end namespace toolchains

0 commit comments

Comments
 (0)