-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[Cygwin] Template instantiations should be exported by default #139799
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Behaves as same as both of Clang and GCC targetting MinGW. Required for compatibility for Cygwin-GCC.
@llvm/pr-subscribers-clang Author: Tomohiro Kashiwada (kikairoya) ChangesBehaves as same as both of Clang and GCC targetting MinGW. Required for compatibility for Cygwin-GCC. Patch is 51.10 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/139799.diff 6 Files Affected:
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index cbccb567e2adf..9610feb5b8820 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -6576,7 +6576,7 @@ void Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {
// declarations, except in MinGW mode.
if (ClassExported && !ClassAttr->isInherited() &&
TSK == TSK_ExplicitInstantiationDeclaration &&
- !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {
+ !Context.getTargetInfo().getTriple().isOSCygMing()) {
Class->dropAttr<DLLExportAttr>();
return;
}
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index 7940340064eda..64fbe435d9789 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -8987,8 +8987,7 @@ Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc,
// The declaration itself has not actually been instantiated, so it is
// still okay to specialize it.
StripImplicitInstantiation(
- PrevDecl,
- Context.getTargetInfo().getTriple().isWindowsGNUEnvironment());
+ PrevDecl, Context.getTargetInfo().getTriple().isOSCygMing());
return false;
}
// Fall through
@@ -9855,7 +9854,7 @@ DeclResult Sema::ActOnExplicitInstantiation(
: TSK_ExplicitInstantiationDeclaration;
if (TSK == TSK_ExplicitInstantiationDeclaration &&
- !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {
+ !Context.getTargetInfo().getTriple().isOSCygMing()) {
// Check for dllexport class template instantiation declarations,
// except for MinGW mode.
for (const ParsedAttr &AL : Attr) {
@@ -9920,7 +9919,7 @@ DeclResult Sema::ActOnExplicitInstantiation(
= PrevDecl ? PrevDecl->getTemplateSpecializationKind() : TSK_Undeclared;
if (TSK == TSK_ExplicitInstantiationDefinition && PrevDecl != nullptr &&
- Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {
+ Context.getTargetInfo().getTriple().isOSCygMing()) {
// Check for dllexport class template instantiation definitions in MinGW
// mode, if a previous declaration of the instantiation was seen.
for (const ParsedAttr &AL : Attr) {
@@ -10088,7 +10087,7 @@ DeclResult Sema::ActOnExplicitInstantiation(
// In MinGW mode, export the template instantiation if the declaration
// was marked dllexport.
if (PrevDecl_TSK == TSK_ExplicitInstantiationDeclaration &&
- Context.getTargetInfo().getTriple().isWindowsGNUEnvironment() &&
+ Context.getTargetInfo().getTriple().isOSCygMing() &&
PrevDecl->hasAttr<DLLExportAttr>()) {
dllExportImportClassTemplateSpecialization(*this, Def);
}
diff --git a/clang/test/CodeGenCXX/dllexport-members.cpp b/clang/test/CodeGenCXX/dllexport-members.cpp
index e4effa4c72c72..3753050cbf7d5 100644
--- a/clang/test/CodeGenCXX/dllexport-members.cpp
+++ b/clang/test/CodeGenCXX/dllexport-members.cpp
@@ -4,6 +4,8 @@
// RUN: %clang_cc1 -no-enable-noundef-analysis -triple x86_64-windows-msvc -fms-compatibility -fms-compatibility-version=19 -emit-llvm -std=c++1y -O0 -o - %s | FileCheck --check-prefix=M64VS2015 %s
// RUN: %clang_cc1 -no-enable-noundef-analysis -triple i686-windows-gnu -emit-llvm -std=c++1y -O0 -o - %s | FileCheck --check-prefix=GNU --check-prefix=G32 %s
// RUN: %clang_cc1 -no-enable-noundef-analysis -triple x86_64-windows-gnu -emit-llvm -std=c++1y -O0 -o - %s | FileCheck --check-prefix=GNU --check-prefix=G64 %s
+// RUN: %clang_cc1 -no-enable-noundef-analysis -triple i686-pc-cygwin -emit-llvm -std=c++1y -O0 -o - %s | FileCheck --check-prefix=GNU --check-prefix=C32 %s
+// RUN: %clang_cc1 -no-enable-noundef-analysis -triple x86_64-pc-cygwin -emit-llvm -std=c++1y -O0 -o - %s | FileCheck --check-prefix=GNU --check-prefix=G64 %s
// Helper structs to make templates more expressive.
struct ImplicitInst_Exported {};
@@ -35,12 +37,16 @@ struct ExportMembers {
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"?normalInlineDecl@ExportMembers@@QAEXXZ"(ptr {{[^,]*}} %this)
// M64-DAG: define weak_odr dso_local dllexport void @"?normalInlineDecl@ExportMembers@@QEAAXXZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers9normalDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN13ExportMembers9normalDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers9normalDefEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers13normalInclassEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers13normalInclassEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers13normalInclassEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers15normalInlineDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers15normalInlineDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers15normalInlineDefEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers16normalInlineDeclEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers16normalInlineDeclEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers16normalInlineDeclEv(ptr {{[^,]*}} %this)
// M32-DAG: define linkonce_odr dso_local x86_thiscallcc void @"?referencedNonExportedInClass@ExportMembers@@QAEXXZ"
__declspec(dllexport) void normalDef();
@@ -58,12 +64,16 @@ struct ExportMembers {
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"?virtualInlineDecl@ExportMembers@@UAEXXZ"(ptr {{[^,]*}} %this)
// M64-DAG: define weak_odr dso_local dllexport void @"?virtualInlineDecl@ExportMembers@@UEAAXXZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers10virtualDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN13ExportMembers10virtualDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers10virtualDefEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers14virtualInclassEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers14virtualInclassEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers14virtualInclassEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers16virtualInlineDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers16virtualInlineDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers16virtualInlineDefEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers17virtualInlineDeclEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers17virtualInlineDeclEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers17virtualInlineDeclEv(ptr {{[^,]*}} %this)
__declspec(dllexport) virtual void virtualDef();
__declspec(dllexport) virtual void virtualInclass() {}
@@ -86,6 +96,7 @@ struct ExportMembers {
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"?protectedDef@ExportMembers@@IAEXXZ"(ptr {{[^,]*}} %this)
// M64-DAG: define dso_local dllexport void @"?protectedDef@ExportMembers@@IEAAXXZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers12protectedDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN13ExportMembers12protectedDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers12protectedDefEv(ptr {{[^,]*}} %this)
// MSC-DAG: define dso_local dllexport void @"?protectedStaticDef@ExportMembers@@KAXXZ"()
// GNU-DAG: define dso_local dllexport void @_ZN13ExportMembers18protectedStaticDefEv()
@@ -96,6 +107,7 @@ struct ExportMembers {
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"?privateDef@ExportMembers@@AAEXXZ"(ptr {{[^,]*}} %this)
// M64-DAG: define dso_local dllexport void @"?privateDef@ExportMembers@@AEAAXXZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers10privateDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN13ExportMembers10privateDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers10privateDefEv(ptr {{[^,]*}} %this)
// MSC-DAG: define dso_local dllexport void @"?privateStaticDef@ExportMembers@@CAXXZ"()
// GNU-DAG: define dso_local dllexport void @_ZN13ExportMembers16privateStaticDefEv()
@@ -106,6 +118,7 @@ struct ExportMembers {
// M32-DAG: define dso_local x86_thiscallcc void @"?ignored@ExportMembers@@QAEXXZ"(ptr {{[^,]*}} %this)
// M64-DAG: define dso_local void @"?ignored@ExportMembers@@QEAAXXZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ExportMembers7ignoredEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local void @_ZN13ExportMembers7ignoredEv(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local void @_ZN13ExportMembers7ignoredEv(ptr {{[^,]*}} %this)
public:
void ignored();
@@ -163,12 +176,16 @@ struct ExportMembers::Nested {
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"?normalInlineDecl@Nested@ExportMembers@@QAEXXZ"(ptr {{[^,]*}} %this)
// M64-DAG: define weak_odr dso_local dllexport void @"?normalInlineDecl@Nested@ExportMembers@@QEAAXXZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested9normalDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested9normalDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested9normalDefEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested13normalInclassEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested13normalInclassEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested13normalInclassEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested15normalInlineDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested15normalInlineDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested15normalInlineDefEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested16normalInlineDeclEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested16normalInlineDeclEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested16normalInlineDeclEv(ptr {{[^,]*}} %this)
__declspec(dllexport) void normalDef();
__declspec(dllexport) void normalInclass() {}
@@ -184,12 +201,16 @@ struct ExportMembers::Nested {
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"?virtualInlineDecl@Nested@ExportMembers@@UAEXXZ"(ptr {{[^,]*}} %this)
// M64-DAG: define weak_odr dso_local dllexport void @"?virtualInlineDecl@Nested@ExportMembers@@UEAAXXZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested10virtualDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested10virtualDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested10virtualDefEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested14virtualInclassEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested14virtualInclassEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested14virtualInclassEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested16virtualInlineDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested16virtualInlineDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested16virtualInlineDefEv(ptr {{[^,]*}} %this)
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested17virtualInlineDeclEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested17virtualInlineDeclEv(ptr {{[^,]*}} %this)
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested17virtualInlineDeclEv(ptr {{[^,]*}} %this)
__declspec(dllexport) virtual void virtualDef();
__declspec(dllexport) virtual void virtualInclass() {}
@@ -212,6 +233,7 @@ struct ExportMembers::Nested {
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"?protectedDef@Nested@ExportMembers@@IAEXXZ"(ptr {{[^,]*}} %this)
// M64-DAG: define dso_local dllexport void @"?protectedDef@Nested@ExportMembers@@IEAAXXZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested12protectedDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested12protectedDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested12protectedDefEv(ptr {{[^,]*}} %this)
// MSC-DAG: define dso_local dllexport void @"?protectedStaticDef@Nested@ExportMembers@@KAXXZ"()
// GNU-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested18protectedStaticDefEv()
@@ -222,6 +244,7 @@ struct ExportMembers::Nested {
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"?privateDef@Nested@ExportMembers@@AAEXXZ"(ptr {{[^,]*}} %this)
// M64-DAG: define dso_local dllexport void @"?privateDef@Nested@ExportMembers@@AEAAXXZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested10privateDefEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested10privateDefEv(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested10privateDefEv(ptr {{[^,]*}} %this)
// MSC-DAG: define dso_local dllexport void @"?privateStaticDef@Nested@ExportMembers@@CAXXZ"()
// GNU-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested16privateStaticDefEv()
@@ -232,6 +255,7 @@ struct ExportMembers::Nested {
// M32-DAG: define dso_local x86_thiscallcc void @"?ignored@Nested@ExportMembers@@QAEXXZ"(ptr {{[^,]*}} %this)
// M64-DAG: define dso_local void @"?ignored@Nested@ExportMembers@@QEAAXXZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ExportMembers6Nested7ignoredEv(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local void @_ZN13ExportMembers6Nested7ignoredEv(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local void @_ZN13ExportMembers6Nested7ignoredEv(ptr {{[^,]*}} %this)
public:
void ignored();
@@ -283,44 +307,54 @@ struct ExportSpecials {
// M32-DAG: define dso_local dllexport x86_thiscallcc ptr @"??0ExportSpecials@@QAE@XZ"(ptr {{[^,]*}} returned {{[^,]*}} %this)
// M64-DAG: define dso_local dllexport ptr @"??0ExportSpecials@@QEAA@XZ"(ptr {{[^,]*}} returned {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1Ev(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1Ev(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1Ev(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2Ev(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2Ev(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2Ev(ptr {{[^,]*}} %this)
__declspec(dllexport) ExportSpecials();
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"??1ExportSpecials@@QAE@XZ"(ptr {{[^,]*}} %this)
// M64-DAG: define dso_local dllexport void @"??1ExportSpecials@@QEAA@XZ"(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsD1Ev(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN14ExportSpecialsD1Ev(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsD1Ev(ptr {{[^,]*}} %this)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsD2Ev(ptr {{[^,]*}} %this)
+ // C32-DAG: define dso_local dllexport void @_ZN14ExportSpecialsD2Ev(ptr {{[^,]*}} %this)
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsD2Ev(ptr {{[^,]*}} %this)
__declspec(dllexport) ~ExportSpecials();
// M32-DAG: define dso_local dllexport x86_thiscallcc ptr @"??0ExportSpecials@@QAE@ABU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
// M64-DAG: define dso_local dllexport ptr @"??0ExportSpecials@@QEAA@AEBU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
+ // C32-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
+ // C32-DAG: define dso_local dllexport ...
[truncated]
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Behaves as same as both of Clang and GCC targetting MinGW. Required for compatibility for Cygwin-GCC.
Divided from #138773