Previously we were stripping these normally inherited attributes during explicit specialization. However for class template member functions (but not function templates), MSVC keeps the attribute. This makes Clang match that behavior, and fixes GitHub issue #54717 Differential revision: https://reviews.llvm.org/D135154
898 lines
71 KiB
C++
898 lines
71 KiB
C++
// RUN: %clang_cc1 -no-enable-noundef-analysis -disable-llvm-passes -triple i686-windows-msvc -fms-compatibility -emit-llvm -std=c++1y -O0 -o - %s -DMSABI | FileCheck --check-prefix=MSC --check-prefix=M32 %s
|
|
// RUN: %clang_cc1 -no-enable-noundef-analysis -disable-llvm-passes -triple x86_64-windows-msvc -fms-compatibility -emit-llvm -std=c++1y -O0 -o - %s -DMSABI | FileCheck --check-prefix=MSC --check-prefix=M64 %s
|
|
// RUN: %clang_cc1 -no-enable-noundef-analysis -disable-llvm-passes -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 -disable-llvm-passes -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 -disable-llvm-passes -triple i686-windows-msvc -fms-compatibility -emit-llvm -std=c++1y -O1 -o - %s -DMSABI | FileCheck --check-prefix=MO1 %s
|
|
// RUN: %clang_cc1 -no-enable-noundef-analysis -disable-llvm-passes -triple i686-windows-gnu -emit-llvm -std=c++1y -O1 -o - %s | FileCheck --check-prefix=GO1 %s
|
|
|
|
// Helper structs to make templates more expressive.
|
|
struct ImplicitInst_Imported {};
|
|
struct ExplicitDecl_Imported {};
|
|
struct ExplicitInst_Imported {};
|
|
struct ExplicitSpec_Imported {};
|
|
struct ExplicitSpec_Def_Imported {};
|
|
struct ExplicitSpec_InlineDef_Imported {};
|
|
struct ExplicitSpec_NotImported {};
|
|
|
|
#define JOIN2(x, y) x##y
|
|
#define JOIN(x, y) JOIN2(x, y)
|
|
#define UNIQ(name) JOIN(name, __LINE__)
|
|
#define USE(func) void UNIQ(use)() { func(); }
|
|
#define USEMV(cls, var) int UNIQ(use)() { return ref(cls::var); }
|
|
#define USEMF(cls, fun) template<> void useMemFun<__LINE__, cls>() { cls().fun(); }
|
|
#define USESPECIALS(cls) void UNIQ(use)() { useSpecials<cls>(); }
|
|
|
|
template<typename T>
|
|
T ref(T const& v) { return v; }
|
|
|
|
template<int Line, typename T>
|
|
void useMemFun();
|
|
|
|
template<typename T>
|
|
void useSpecials() {
|
|
T v; // Default constructor
|
|
|
|
T c1(static_cast<const T&>(v)); // Copy constructor
|
|
T c2 = static_cast<const T&>(v); // Copy constructor
|
|
T c3;
|
|
c3 = static_cast<const T&>(v); // Copy assignment
|
|
|
|
T m1(static_cast<T&&>(v)); // Move constructor
|
|
T m2 = static_cast<T&&>(v); // Move constructor
|
|
T m3;
|
|
m3 = static_cast<T&&>(v); // Move assignment
|
|
}
|
|
|
|
// Used to force non-trivial special members.
|
|
struct __declspec(dllimport) ForceNonTrivial {
|
|
ForceNonTrivial();
|
|
~ForceNonTrivial();
|
|
ForceNonTrivial(const ForceNonTrivial&);
|
|
ForceNonTrivial& operator=(const ForceNonTrivial&);
|
|
ForceNonTrivial(ForceNonTrivial&&);
|
|
ForceNonTrivial& operator=(ForceNonTrivial&&);
|
|
};
|
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Class members
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Import individual members of a class.
|
|
struct ImportMembers {
|
|
struct Nested;
|
|
|
|
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"?normalDef@ImportMembers@@QAEXXZ"(ptr {{[^,]*}} %this)
|
|
// M64-DAG: define dso_local dllexport void @"?normalDef@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}} %this)
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?normalDecl@ImportMembers@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?normalDecl@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?normalInclass@ImportMembers@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?normalInclass@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?normalInlineDef@ImportMembers@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?normalInlineDef@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?normalInlineDecl@ImportMembers@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?normalInlineDecl@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ImportMembers9normalDefEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define dso_local void @_ZN13ImportMembers9normalDefEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers10normalDeclEv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN13ImportMembers10normalDeclEv(ptr {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers13normalInclassEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers13normalInclassEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers15normalInlineDefEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers15normalInlineDefEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers16normalInlineDeclEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers16normalInlineDeclEv(ptr {{[^,]*}} %this)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?normalInclass@ImportMembers@@QAEXXZ"(
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?normalInlineDef@ImportMembers@@QAEXXZ"(
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?normalInlineDecl@ImportMembers@@QAEXXZ"(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers13normalInclassEv(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers15normalInlineDefEv(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers16normalInlineDeclEv(
|
|
__declspec(dllimport) void normalDef(); // dllimport ignored
|
|
__declspec(dllimport) void normalDecl();
|
|
__declspec(dllimport) void normalInclass() {}
|
|
__declspec(dllimport) void normalInlineDef();
|
|
__declspec(dllimport) inline void normalInlineDecl();
|
|
|
|
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"?virtualDef@ImportMembers@@UAEXXZ"(ptr {{[^,]*}} %this)
|
|
// M64-DAG: define dso_local dllexport void @"?virtualDef@ImportMembers@@UEAAXXZ"(ptr {{[^,]*}} %this)
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?virtualDecl@ImportMembers@@UAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?virtualDecl@ImportMembers@@UEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?virtualInclass@ImportMembers@@UAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?virtualInclass@ImportMembers@@UEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?virtualInlineDef@ImportMembers@@UAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?virtualInlineDef@ImportMembers@@UEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?virtualInlineDecl@ImportMembers@@UAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?virtualInlineDecl@ImportMembers@@UEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ImportMembers10virtualDefEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define dso_local void @_ZN13ImportMembers10virtualDefEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers11virtualDeclEv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN13ImportMembers11virtualDeclEv(ptr {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers14virtualInclassEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers14virtualInclassEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers16virtualInlineDefEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers16virtualInlineDefEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers17virtualInlineDeclEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers17virtualInlineDeclEv(ptr {{[^,]*}} %this)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?virtualInclass@ImportMembers@@UAEXXZ"(
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?virtualInlineDef@ImportMembers@@UAEXXZ"(
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?virtualInlineDecl@ImportMembers@@UAEXXZ"(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers14virtualInclassEv(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers16virtualInlineDefEv(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers17virtualInlineDeclEv(
|
|
__declspec(dllimport) virtual void virtualDef(); // dllimport ignored
|
|
__declspec(dllimport) virtual void virtualDecl();
|
|
__declspec(dllimport) virtual void virtualInclass() {}
|
|
__declspec(dllimport) virtual void virtualInlineDef();
|
|
__declspec(dllimport) virtual inline void virtualInlineDecl();
|
|
|
|
// MSC-DAG: define dso_local dllexport void @"?staticDef@ImportMembers@@SAXXZ"()
|
|
// MSC-DAG: declare dllimport void @"?staticDecl@ImportMembers@@SAXXZ"()
|
|
// MSC-DAG: declare dllimport void @"?staticInclass@ImportMembers@@SAXXZ"()
|
|
// MSC-DAG: declare dllimport void @"?staticInlineDef@ImportMembers@@SAXXZ"()
|
|
// MSC-DAG: declare dllimport void @"?staticInlineDecl@ImportMembers@@SAXXZ"()
|
|
// GNU-DAG: define dso_local void @_ZN13ImportMembers9staticDefEv()
|
|
// GNU-DAG: declare dllimport void @_ZN13ImportMembers10staticDeclEv()
|
|
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers13staticInclassEv()
|
|
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers15staticInlineDefEv()
|
|
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers16staticInlineDeclEv()
|
|
// MO1-DAG: define available_externally dllimport void @"?staticInclass@ImportMembers@@SAXXZ"()
|
|
// MO1-DAG: define available_externally dllimport void @"?staticInlineDef@ImportMembers@@SAXXZ"()
|
|
// MO1-DAG: define available_externally dllimport void @"?staticInlineDecl@ImportMembers@@SAXXZ"()
|
|
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers13staticInclassEv()
|
|
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers15staticInlineDefEv()
|
|
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers16staticInlineDeclEv()
|
|
__declspec(dllimport) static void staticDef(); // dllimport ignored
|
|
__declspec(dllimport) static void staticDecl();
|
|
__declspec(dllimport) static void staticInclass() {}
|
|
__declspec(dllimport) static void staticInlineDef();
|
|
__declspec(dllimport) static inline void staticInlineDecl();
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?protectedNormalDecl@ImportMembers@@IAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?protectedNormalDecl@ImportMembers@@IEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers19protectedNormalDeclEv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN13ImportMembers19protectedNormalDeclEv(ptr {{[^,]*}})
|
|
// MSC-DAG: declare dllimport void @"?protectedStaticDecl@ImportMembers@@KAXXZ"()
|
|
// GNU-DAG: declare dllimport void @_ZN13ImportMembers19protectedStaticDeclEv()
|
|
protected:
|
|
__declspec(dllimport) void protectedNormalDecl();
|
|
__declspec(dllimport) static void protectedStaticDecl();
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?privateNormalDecl@ImportMembers@@AAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?privateNormalDecl@ImportMembers@@AEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers17privateNormalDeclEv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN13ImportMembers17privateNormalDeclEv(ptr {{[^,]*}})
|
|
// MSC-DAG: declare dllimport void @"?privateStaticDecl@ImportMembers@@CAXXZ"()
|
|
// GNU-DAG: declare dllimport void @_ZN13ImportMembers17privateStaticDeclEv()
|
|
private:
|
|
__declspec(dllimport) void privateNormalDecl();
|
|
__declspec(dllimport) static void privateStaticDecl();
|
|
|
|
// M32-DAG: declare dso_local x86_thiscallcc void @"?ignored@ImportMembers@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dso_local void @"?ignored@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dso_local x86_thiscallcc void @_ZN13ImportMembers7ignoredEv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dso_local void @_ZN13ImportMembers7ignoredEv(ptr {{[^,]*}})
|
|
public:
|
|
void ignored();
|
|
|
|
// MSC-DAG: @"?StaticField@ImportMembers@@2HA" = external dllimport global i32
|
|
// MSC-DAG: @"?StaticConstField@ImportMembers@@2HB" = external dllimport constant i32
|
|
// MSC-DAG: @"?StaticConstFieldEqualInit@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4
|
|
// MSC-DAG: @"?StaticConstFieldBraceInit@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4
|
|
// MSC-DAG: @"?ConstexprField@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4
|
|
// GNU-DAG: @_ZN13ImportMembers11StaticFieldE = external dllimport global i32
|
|
// GNU-DAG: @_ZN13ImportMembers16StaticConstFieldE = external dllimport constant i32
|
|
// GNU-DAG: @_ZN13ImportMembers25StaticConstFieldEqualInitE = external dllimport constant i32
|
|
// GNU-DAG: @_ZN13ImportMembers25StaticConstFieldBraceInitE = external dllimport constant i32
|
|
// GNU-DAG: @_ZN13ImportMembers14ConstexprFieldE = external dllimport constant i32
|
|
__declspec(dllimport) static int StaticField;
|
|
__declspec(dllimport) static const int StaticConstField;
|
|
__declspec(dllimport) static const int StaticConstFieldEqualInit = 1;
|
|
__declspec(dllimport) static const int StaticConstFieldBraceInit{1};
|
|
__declspec(dllimport) constexpr static int ConstexprField = 1;
|
|
|
|
template<int Line, typename T> friend void useMemFun();
|
|
};
|
|
|
|
void ImportMembers::normalDef() {} // dllimport ignored
|
|
inline void ImportMembers::normalInlineDef() {}
|
|
void ImportMembers::normalInlineDecl() {}
|
|
void ImportMembers::virtualDef() {} // dllimport ignored
|
|
inline void ImportMembers::virtualInlineDef() {}
|
|
void ImportMembers::virtualInlineDecl() {}
|
|
void ImportMembers::staticDef() {} // dllimport ignored
|
|
inline void ImportMembers::staticInlineDef() {}
|
|
void ImportMembers::staticInlineDecl() {}
|
|
|
|
USEMF(ImportMembers, normalDef)
|
|
USEMF(ImportMembers, normalDecl)
|
|
USEMF(ImportMembers, normalInclass)
|
|
USEMF(ImportMembers, normalInlineDef)
|
|
USEMF(ImportMembers, normalInlineDecl)
|
|
USEMF(ImportMembers, virtualDef)
|
|
USEMF(ImportMembers, virtualDecl)
|
|
USEMF(ImportMembers, virtualInclass)
|
|
USEMF(ImportMembers, virtualInlineDef)
|
|
USEMF(ImportMembers, virtualInlineDecl)
|
|
USEMF(ImportMembers, staticDef)
|
|
USEMF(ImportMembers, staticDecl)
|
|
USEMF(ImportMembers, staticInclass)
|
|
USEMF(ImportMembers, staticInlineDef)
|
|
USEMF(ImportMembers, staticInlineDecl)
|
|
USEMF(ImportMembers, protectedNormalDecl)
|
|
USEMF(ImportMembers, protectedStaticDecl)
|
|
USEMF(ImportMembers, privateNormalDecl)
|
|
USEMF(ImportMembers, privateStaticDecl)
|
|
USEMF(ImportMembers, ignored)
|
|
|
|
USEMV(ImportMembers, StaticField)
|
|
USEMV(ImportMembers, StaticConstField)
|
|
USEMV(ImportMembers, StaticConstFieldEqualInit)
|
|
USEMV(ImportMembers, StaticConstFieldBraceInit)
|
|
USEMV(ImportMembers, ConstexprField)
|
|
|
|
|
|
// Import individual members of a nested class.
|
|
struct ImportMembers::Nested {
|
|
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"?normalDef@Nested@ImportMembers@@QAEXXZ"(ptr {{[^,]*}} %this)
|
|
// M64-DAG: define dso_local dllexport void @"?normalDef@Nested@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}} %this)
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?normalDecl@Nested@ImportMembers@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?normalDecl@Nested@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?normalInclass@Nested@ImportMembers@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?normalInclass@Nested@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?normalInlineDef@Nested@ImportMembers@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?normalInlineDef@Nested@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?normalInlineDecl@Nested@ImportMembers@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?normalInlineDecl@Nested@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested9normalDefEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define dso_local void @_ZN13ImportMembers6Nested9normalDefEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers6Nested10normalDeclEv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN13ImportMembers6Nested10normalDeclEv(ptr {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested13normalInclassEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested13normalInclassEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested15normalInlineDefEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested15normalInlineDefEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested16normalInlineDeclEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested16normalInlineDeclEv(ptr {{[^,]*}} %this)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?normalInclass@Nested@ImportMembers@@QAEXXZ"(
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?normalInlineDef@Nested@ImportMembers@@QAEXXZ"(
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?normalInlineDecl@Nested@ImportMembers@@QAEXXZ"(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested13normalInclassEv(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested15normalInlineDefEv(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested16normalInlineDeclEv(
|
|
__declspec(dllimport) void normalDef(); // dllimport ignored
|
|
__declspec(dllimport) void normalDecl();
|
|
__declspec(dllimport) void normalInclass() {}
|
|
__declspec(dllimport) void normalInlineDef();
|
|
__declspec(dllimport) inline void normalInlineDecl();
|
|
|
|
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"?virtualDef@Nested@ImportMembers@@UAEXXZ"(ptr {{[^,]*}} %this)
|
|
// M64-DAG: define dso_local dllexport void @"?virtualDef@Nested@ImportMembers@@UEAAXXZ"(ptr {{[^,]*}} %this)
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?virtualDecl@Nested@ImportMembers@@UAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?virtualDecl@Nested@ImportMembers@@UEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?virtualInclass@Nested@ImportMembers@@UAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?virtualInclass@Nested@ImportMembers@@UEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?virtualInlineDef@Nested@ImportMembers@@UAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?virtualInlineDef@Nested@ImportMembers@@UEAAXXZ"(ptr {{[^,]*}})
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?virtualInlineDecl@Nested@ImportMembers@@UAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?virtualInlineDecl@Nested@ImportMembers@@UEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested10virtualDefEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define dso_local void @_ZN13ImportMembers6Nested10virtualDefEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers6Nested11virtualDeclEv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN13ImportMembers6Nested11virtualDeclEv(ptr {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested14virtualInclassEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested14virtualInclassEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested16virtualInlineDefEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested16virtualInlineDefEv(ptr {{[^,]*}} %this)
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(ptr {{[^,]*}} %this)
|
|
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?virtualInclass@Nested@ImportMembers@@UAEXXZ"(
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?virtualInlineDef@Nested@ImportMembers@@UAEXXZ"(
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"?virtualInlineDecl@Nested@ImportMembers@@UAEXXZ"(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested14virtualInclassEv(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested16virtualInlineDefEv(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(
|
|
__declspec(dllimport) virtual void virtualDef(); // dllimport ignored
|
|
__declspec(dllimport) virtual void virtualDecl();
|
|
__declspec(dllimport) virtual void virtualInclass() {}
|
|
__declspec(dllimport) virtual void virtualInlineDef();
|
|
__declspec(dllimport) virtual inline void virtualInlineDecl();
|
|
|
|
// MSC-DAG: define dso_local dllexport void @"?staticDef@Nested@ImportMembers@@SAXXZ"()
|
|
// MSC-DAG: declare dllimport void @"?staticDecl@Nested@ImportMembers@@SAXXZ"()
|
|
// MSC-DAG: declare dllimport void @"?staticInclass@Nested@ImportMembers@@SAXXZ"()
|
|
// MSC-DAG: declare dllimport void @"?staticInlineDef@Nested@ImportMembers@@SAXXZ"()
|
|
// MSC-DAG: declare dllimport void @"?staticInlineDecl@Nested@ImportMembers@@SAXXZ"()
|
|
// GNU-DAG: define dso_local void @_ZN13ImportMembers6Nested9staticDefEv()
|
|
// GNU-DAG: declare dllimport void @_ZN13ImportMembers6Nested10staticDeclEv()
|
|
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested13staticInclassEv()
|
|
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested15staticInlineDefEv()
|
|
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested16staticInlineDeclEv()
|
|
// MO1-DAG: define available_externally dllimport void @"?staticInclass@Nested@ImportMembers@@SAXXZ"()
|
|
// MO1-DAG: define available_externally dllimport void @"?staticInlineDef@Nested@ImportMembers@@SAXXZ"()
|
|
// MO1-DAG: define available_externally dllimport void @"?staticInlineDecl@Nested@ImportMembers@@SAXXZ"()
|
|
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested13staticInclassEv()
|
|
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested15staticInlineDefEv()
|
|
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested16staticInlineDeclEv()
|
|
__declspec(dllimport) static void staticDef(); // dllimport ignored
|
|
__declspec(dllimport) static void staticDecl();
|
|
__declspec(dllimport) static void staticInclass() {}
|
|
__declspec(dllimport) static void staticInlineDef();
|
|
__declspec(dllimport) static inline void staticInlineDecl();
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?protectedNormalDecl@Nested@ImportMembers@@IAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?protectedNormalDecl@Nested@ImportMembers@@IEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers6Nested19protectedNormalDeclEv(ptr {{[^,]*}}
|
|
// G64-DAG: declare dllimport void @_ZN13ImportMembers6Nested19protectedNormalDeclEv(ptr {{[^,]*}})
|
|
// MSC-DAG: declare dllimport void @"?protectedStaticDecl@Nested@ImportMembers@@KAXXZ"()
|
|
// GNU-DAG: declare dllimport void @_ZN13ImportMembers6Nested19protectedStaticDeclEv()
|
|
protected:
|
|
__declspec(dllimport) void protectedNormalDecl();
|
|
__declspec(dllimport) static void protectedStaticDecl();
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?privateNormalDecl@Nested@ImportMembers@@AAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"?privateNormalDecl@Nested@ImportMembers@@AEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers6Nested17privateNormalDeclEv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN13ImportMembers6Nested17privateNormalDeclEv(ptr {{[^,]*}})
|
|
// MSC-DAG: declare dllimport void @"?privateStaticDecl@Nested@ImportMembers@@CAXXZ"()
|
|
// GNU-DAG: declare dllimport void @_ZN13ImportMembers6Nested17privateStaticDeclEv()
|
|
private:
|
|
__declspec(dllimport) void privateNormalDecl();
|
|
__declspec(dllimport) static void privateStaticDecl();
|
|
|
|
// M32-DAG: declare dso_local x86_thiscallcc void @"?ignored@Nested@ImportMembers@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dso_local void @"?ignored@Nested@ImportMembers@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested7ignoredEv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dso_local void @_ZN13ImportMembers6Nested7ignoredEv(ptr {{[^,]*}})
|
|
public:
|
|
void ignored();
|
|
|
|
// MSC-DAG: @"?StaticField@Nested@ImportMembers@@2HA" = external dllimport global i32
|
|
// MSC-DAG: @"?StaticConstField@Nested@ImportMembers@@2HB" = external dllimport constant i32
|
|
// MSC-DAG: @"?StaticConstFieldEqualInit@Nested@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4
|
|
// MSC-DAG: @"?StaticConstFieldBraceInit@Nested@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4
|
|
// MSC-DAG: @"?ConstexprField@Nested@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4
|
|
// GNU-DAG: @_ZN13ImportMembers6Nested11StaticFieldE = external dllimport global i32
|
|
// GNU-DAG: @_ZN13ImportMembers6Nested16StaticConstFieldE = external dllimport constant i32
|
|
// GNU-DAG: @_ZN13ImportMembers6Nested25StaticConstFieldEqualInitE = external dllimport constant i32
|
|
// GNU-DAG: @_ZN13ImportMembers6Nested25StaticConstFieldBraceInitE = external dllimport constant i32
|
|
// GNU-DAG: @_ZN13ImportMembers6Nested14ConstexprFieldE = external dllimport constant i32
|
|
__declspec(dllimport) static int StaticField;
|
|
__declspec(dllimport) static const int StaticConstField;
|
|
__declspec(dllimport) static const int StaticConstFieldEqualInit = 1;
|
|
__declspec(dllimport) static const int StaticConstFieldBraceInit{1};
|
|
__declspec(dllimport) constexpr static int ConstexprField = 1;
|
|
|
|
template<int Line, typename T> friend void useMemFun();
|
|
};
|
|
|
|
void ImportMembers::Nested::normalDef() {} // dllimport ignored
|
|
inline void ImportMembers::Nested::normalInlineDef() {}
|
|
void ImportMembers::Nested::normalInlineDecl() {}
|
|
void ImportMembers::Nested::virtualDef() {} // dllimport ignored
|
|
inline void ImportMembers::Nested::virtualInlineDef() {}
|
|
void ImportMembers::Nested::virtualInlineDecl() {}
|
|
void ImportMembers::Nested::staticDef() {} // dllimport ignored
|
|
inline void ImportMembers::Nested::staticInlineDef() {}
|
|
void ImportMembers::Nested::staticInlineDecl() {}
|
|
|
|
USEMF(ImportMembers::Nested, normalDef)
|
|
USEMF(ImportMembers::Nested, normalDecl)
|
|
USEMF(ImportMembers::Nested, normalInclass)
|
|
USEMF(ImportMembers::Nested, normalInlineDef)
|
|
USEMF(ImportMembers::Nested, normalInlineDecl)
|
|
USEMF(ImportMembers::Nested, virtualDef)
|
|
USEMF(ImportMembers::Nested, virtualDecl)
|
|
USEMF(ImportMembers::Nested, virtualInclass)
|
|
USEMF(ImportMembers::Nested, virtualInlineDef)
|
|
USEMF(ImportMembers::Nested, virtualInlineDecl)
|
|
USEMF(ImportMembers::Nested, staticDef)
|
|
USEMF(ImportMembers::Nested, staticDecl)
|
|
USEMF(ImportMembers::Nested, staticInclass)
|
|
USEMF(ImportMembers::Nested, staticInlineDef)
|
|
USEMF(ImportMembers::Nested, staticInlineDecl)
|
|
USEMF(ImportMembers::Nested, protectedNormalDecl)
|
|
USEMF(ImportMembers::Nested, protectedStaticDecl)
|
|
USEMF(ImportMembers::Nested, privateNormalDecl)
|
|
USEMF(ImportMembers::Nested, privateStaticDecl)
|
|
USEMF(ImportMembers::Nested, ignored)
|
|
|
|
USEMV(ImportMembers::Nested, StaticField)
|
|
USEMV(ImportMembers::Nested, StaticConstField)
|
|
USEMV(ImportMembers::Nested, StaticConstFieldEqualInit)
|
|
USEMV(ImportMembers::Nested, StaticConstFieldBraceInit)
|
|
USEMV(ImportMembers::Nested, ConstexprField)
|
|
|
|
|
|
// Import special member functions.
|
|
struct ImportSpecials {
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportSpecials@@QAE@XZ"(ptr {{[^,]*}} returned {{[^,]*}})
|
|
// M64-DAG: declare dllimport ptr @"??0ImportSpecials@@QEAA@XZ"(ptr {{[^,]*}} returned {{[^,]*}})
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1Ev(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1Ev(ptr {{[^,]*}})
|
|
__declspec(dllimport) ImportSpecials();
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??1ImportSpecials@@QAE@XZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??1ImportSpecials@@QEAA@XZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsD1Ev(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsD1Ev(ptr {{[^,]*}})
|
|
__declspec(dllimport) ~ImportSpecials();
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportSpecials@@QAE@ABU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport ptr @"??0ImportSpecials@@QEAA@AEBU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1ERKS_(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1ERKS_(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
__declspec(dllimport) ImportSpecials(const ImportSpecials&);
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportSpecials@@QAEAAU0@ABU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportSpecials@@QEAAAEAU0@AEBU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: declare dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN14ImportSpecialsaSERKS_(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G64-DAG: declare dllimport nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN14ImportSpecialsaSERKS_(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
__declspec(dllimport) ImportSpecials& operator=(const ImportSpecials&);
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportSpecials@@QAE@$$QAU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport ptr @"??0ImportSpecials@@QEAA@$$QEAU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1EOS_(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1EOS_(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
__declspec(dllimport) ImportSpecials(ImportSpecials&&);
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportSpecials@@QAEAAU0@$$QAU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: declare dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN14ImportSpecialsaSEOS_(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G64-DAG: declare dllimport nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN14ImportSpecialsaSEOS_(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
__declspec(dllimport) ImportSpecials& operator=(ImportSpecials&&);
|
|
};
|
|
USESPECIALS(ImportSpecials)
|
|
|
|
|
|
// Export inline special member functions.
|
|
struct ImportInlineSpecials {
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportInlineSpecials@@QAE@XZ"(ptr {{[^,]*}} returned {{[^,]*}})
|
|
// M64-DAG: declare dllimport ptr @"??0ImportInlineSpecials@@QEAA@XZ"(ptr {{[^,]*}} returned {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1Ev(ptr {{[^,]*}} %this)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc ptr @"??0ImportInlineSpecials@@QAE@XZ"(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev(
|
|
__declspec(dllimport) ImportInlineSpecials() {}
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??1ImportInlineSpecials@@QAE@XZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??1ImportInlineSpecials@@QEAA@XZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsD1Ev(ptr {{[^,]*}} %this)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"??1ImportInlineSpecials@@QAE@XZ"(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev(
|
|
__declspec(dllimport) ~ImportInlineSpecials() {}
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportInlineSpecials@@QAE@ABU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport ptr @"??0ImportInlineSpecials@@QEAA@AEBU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc ptr @"??0ImportInlineSpecials@@QAE@ABU0@@Z"(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(
|
|
__declspec(dllimport) inline ImportInlineSpecials(const ImportInlineSpecials&);
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportInlineSpecials@@QAEAAU0@ABU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportInlineSpecials@@QEAAAEAU0@AEBU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN20ImportInlineSpecialsaSERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define linkonce_odr dso_local nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN20ImportInlineSpecialsaSERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportInlineSpecials@@QAEAAU0@ABU0@@Z"(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN20ImportInlineSpecialsaSERKS_(
|
|
__declspec(dllimport) ImportInlineSpecials& operator=(const ImportInlineSpecials&);
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport ptr @"??0ImportInlineSpecials@@QEAA@$$QEAU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1EOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc ptr @"??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(
|
|
__declspec(dllimport) ImportInlineSpecials(ImportInlineSpecials&&) {}
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN20ImportInlineSpecialsaSEOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define linkonce_odr dso_local nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN20ImportInlineSpecialsaSEOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN20ImportInlineSpecialsaSEOS_(
|
|
__declspec(dllimport) ImportInlineSpecials& operator=(ImportInlineSpecials&&) { return *this; }
|
|
};
|
|
ImportInlineSpecials::ImportInlineSpecials(const ImportInlineSpecials&) {}
|
|
inline ImportInlineSpecials& ImportInlineSpecials::operator=(const ImportInlineSpecials&) { return *this; }
|
|
USESPECIALS(ImportInlineSpecials)
|
|
|
|
|
|
// Import defaulted member functions.
|
|
struct ImportDefaulted {
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportDefaulted@@QAE@XZ"(ptr {{[^,]*}} returned {{[^,]*}})
|
|
// M64-DAG: declare dllimport ptr @"??0ImportDefaulted@@QEAA@XZ"(ptr {{[^,]*}} returned {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1Ev(ptr {{[^,]*}} %this)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc ptr @"??0ImportDefaulted@@QAE@XZ"(ptr {{[^,]*}} returned {{[^,]*}} %this)
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(ptr {{[^,]*}} %this)
|
|
__declspec(dllimport) ImportDefaulted() = default;
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??1ImportDefaulted@@QAE@XZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??1ImportDefaulted@@QEAA@XZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedD1Ev(ptr {{[^,]*}} %this)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"??1ImportDefaulted@@QAE@XZ"(ptr {{[^,]*}} %this)
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(ptr {{[^,]*}} %this)
|
|
__declspec(dllimport) ~ImportDefaulted() = default;
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportDefaulted@@QAE@ABU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport ptr @"??0ImportDefaulted@@QEAA@AEBU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc ptr @"??0ImportDefaulted@@QAE@ABU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
__declspec(dllimport) ImportDefaulted(const ImportDefaulted&) = default;
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportDefaulted@@QEAAAEAU0@AEBU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN15ImportDefaultedaSERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define linkonce_odr dso_local nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN15ImportDefaultedaSERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN15ImportDefaultedaSERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
__declspec(dllimport) ImportDefaulted& operator=(const ImportDefaulted&) = default;
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportDefaulted@@QAE@$$QAU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport ptr @"??0ImportDefaulted@@QEAA@$$QEAU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1EOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc ptr @"??0ImportDefaulted@@QAE@$$QAU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
__declspec(dllimport) ImportDefaulted(ImportDefaulted&&) = default;
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportDefaulted@@QEAAAEAU0@$$QEAU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN15ImportDefaultedaSEOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define linkonce_odr dso_local nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN15ImportDefaultedaSEOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN15ImportDefaultedaSEOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
__declspec(dllimport) ImportDefaulted& operator=(ImportDefaulted&&) = default;
|
|
|
|
ForceNonTrivial v; // ensure special members are non-trivial
|
|
};
|
|
USESPECIALS(ImportDefaulted)
|
|
|
|
|
|
// Import defaulted member function definitions.
|
|
struct ImportDefaultedDefs {
|
|
__declspec(dllimport) inline ImportDefaultedDefs();
|
|
__declspec(dllimport) inline ~ImportDefaultedDefs();
|
|
|
|
__declspec(dllimport) ImportDefaultedDefs(const ImportDefaultedDefs&);
|
|
__declspec(dllimport) ImportDefaultedDefs& operator=(const ImportDefaultedDefs&);
|
|
|
|
__declspec(dllimport) ImportDefaultedDefs(ImportDefaultedDefs&&);
|
|
__declspec(dllimport) ImportDefaultedDefs& operator=(ImportDefaultedDefs&&);
|
|
};
|
|
|
|
#ifdef MSABI
|
|
// For MinGW, the function will not be dllimport, and we cannot add the attribute now.
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportDefaultedDefs@@QAE@XZ"(ptr {{[^,]*}} returned {{[^,]*}})
|
|
// M64-DAG: declare dllimport ptr @"??0ImportDefaultedDefs@@QEAA@XZ"(ptr {{[^,]*}} returned {{[^,]*}})
|
|
__declspec(dllimport) ImportDefaultedDefs::ImportDefaultedDefs() = default;
|
|
#endif
|
|
|
|
#ifdef MSABI
|
|
// For MinGW, the function will not be dllimport, and we cannot add the attribute now.
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??1ImportDefaultedDefs@@QAE@XZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??1ImportDefaultedDefs@@QEAA@XZ"(ptr {{[^,]*}})
|
|
__declspec(dllimport) ImportDefaultedDefs::~ImportDefaultedDefs() = default;
|
|
#endif
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc ptr @"??0ImportDefaultedDefs@@QAE@ABU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport ptr @"??0ImportDefaultedDefs@@QEAA@AEBU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC1ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN19ImportDefaultedDefsC1ERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
inline ImportDefaultedDefs::ImportDefaultedDefs(const ImportDefaultedDefs&) = default;
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportDefaultedDefs@@QAEAAU0@ABU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// M64-DAG: declare dllimport nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportDefaultedDefs@@QEAAAEAU0@AEBU0@@Z"(ptr {{[^,]*}}, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}))
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN19ImportDefaultedDefsaSERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define linkonce_odr dso_local nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN19ImportDefaultedDefsaSERKS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
inline ImportDefaultedDefs& ImportDefaultedDefs::operator=(const ImportDefaultedDefs&) = default;
|
|
|
|
// M32-DAG: define dso_local dllexport x86_thiscallcc ptr @"??0ImportDefaultedDefs@@QAE@$$QAU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// M64-DAG: define dso_local dllexport ptr @"??0ImportDefaultedDefs@@QEAA@$$QEAU0@@Z"(ptr {{[^,]*}} returned {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G32-DAG: define dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC1EOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define dso_local void @_ZN19ImportDefaultedDefsC1EOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G32-DAG: define dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC2EOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define dso_local void @_ZN19ImportDefaultedDefsC2EOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
ImportDefaultedDefs::ImportDefaultedDefs(ImportDefaultedDefs&&) = default; // dllimport ignored
|
|
|
|
// M32-DAG: define dso_local dllexport x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// M64-DAG: define dso_local dllexport nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"??4ImportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G32-DAG: define dso_local x86_thiscallcc nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN19ImportDefaultedDefsaSEOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
// G64-DAG: define dso_local nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN19ImportDefaultedDefsaSEOS_(ptr {{[^,]*}} %this, ptr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %0)
|
|
ImportDefaultedDefs& ImportDefaultedDefs::operator=(ImportDefaultedDefs&&) = default; // dllimport ignored
|
|
|
|
USESPECIALS(ImportDefaultedDefs)
|
|
|
|
|
|
// Import allocation functions.
|
|
struct ImportAlloc {
|
|
__declspec(dllimport) void* operator new(__SIZE_TYPE__);
|
|
__declspec(dllimport) void* operator new[](__SIZE_TYPE__);
|
|
__declspec(dllimport) void operator delete(void*);
|
|
__declspec(dllimport) void operator delete[](void*);
|
|
};
|
|
|
|
// M32-DAG: declare dllimport ptr @"??2ImportAlloc@@SAPAXI@Z"(i32)
|
|
// M64-DAG: declare dllimport ptr @"??2ImportAlloc@@SAPEAX_K@Z"(i64)
|
|
// G32-DAG: declare dllimport ptr @_ZN11ImportAllocnwEj(i32)
|
|
// G64-DAG: declare dllimport ptr @_ZN11ImportAllocnwEy(i64)
|
|
void UNIQ(use)() { new ImportAlloc(); }
|
|
|
|
// M32-DAG: declare dllimport ptr @"??_UImportAlloc@@SAPAXI@Z"(i32)
|
|
// M64-DAG: declare dllimport ptr @"??_UImportAlloc@@SAPEAX_K@Z"(i64)
|
|
// G32-DAG: declare dllimport ptr @_ZN11ImportAllocnaEj(i32)
|
|
// G64-DAG: declare dllimport ptr @_ZN11ImportAllocnaEy(i64)
|
|
void UNIQ(use)() { new ImportAlloc[1]; }
|
|
|
|
// M32-DAG: declare dllimport void @"??3ImportAlloc@@SAXPAX@Z"(ptr)
|
|
// M64-DAG: declare dllimport void @"??3ImportAlloc@@SAXPEAX@Z"(ptr)
|
|
// G32-DAG: declare dllimport void @_ZN11ImportAllocdlEPv(ptr)
|
|
// G64-DAG: declare dllimport void @_ZN11ImportAllocdlEPv(ptr)
|
|
void UNIQ(use)(ImportAlloc* ptr) { delete ptr; }
|
|
|
|
// M32-DAG: declare dllimport void @"??_VImportAlloc@@SAXPAX@Z"(ptr)
|
|
// M64-DAG: declare dllimport void @"??_VImportAlloc@@SAXPEAX@Z"(ptr)
|
|
// G32-DAG: declare dllimport void @_ZN11ImportAllocdaEPv(ptr)
|
|
// G64-DAG: declare dllimport void @_ZN11ImportAllocdaEPv(ptr)
|
|
void UNIQ(use)(ImportAlloc* ptr) { delete[] ptr; }
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Class member templates
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
struct MemFunTmpl {
|
|
template<typename T> void normalDef() {}
|
|
template<typename T> __declspec(dllimport) void importedNormal() {}
|
|
template<typename T> static void staticDef() {}
|
|
template<typename T> __declspec(dllimport) static void importedStatic() {}
|
|
};
|
|
|
|
// Import implicit instantiation of an imported member function template.
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??$importedNormal@UImplicitInst_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??$importedNormal@UImplicitInst_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ImplicitInst_ImportedEEvv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl14importedNormalI21ImplicitInst_ImportedEEvv(ptr {{[^,]*}} %this)
|
|
USEMF(MemFunTmpl, importedNormal<ImplicitInst_Imported>)
|
|
|
|
// MSC-DAG: declare dllimport void @"??$importedStatic@UImplicitInst_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
// GNU-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl14importedStaticI21ImplicitInst_ImportedEEvv()
|
|
USE(MemFunTmpl::importedStatic<ImplicitInst_Imported>)
|
|
|
|
|
|
// Import explicit instantiation declaration of an imported member function
|
|
// template.
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??$importedNormal@UExplicitDecl_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??$importedNormal@UExplicitDecl_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dso_local x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ExplicitDecl_ImportedEEvv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dso_local void @_ZN10MemFunTmpl14importedNormalI21ExplicitDecl_ImportedEEvv(ptr {{[^,]*}})
|
|
extern template void MemFunTmpl::importedNormal<ExplicitDecl_Imported>();
|
|
USEMF(MemFunTmpl, importedNormal<ExplicitDecl_Imported>)
|
|
|
|
// MSC-DAG: declare dllimport void @"??$importedStatic@UExplicitDecl_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
// GNU-DAG: declare dso_local void @_ZN10MemFunTmpl14importedStaticI21ExplicitDecl_ImportedEEvv()
|
|
extern template void MemFunTmpl::importedStatic<ExplicitDecl_Imported>();
|
|
USE(MemFunTmpl::importedStatic<ExplicitDecl_Imported>)
|
|
|
|
|
|
// Import explicit instantiation definition of an imported member function
|
|
// template.
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??$importedNormal@UExplicitInst_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??$importedNormal@UExplicitInst_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define weak_odr dso_local x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ExplicitInst_ImportedEEvv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define weak_odr dso_local void @_ZN10MemFunTmpl14importedNormalI21ExplicitInst_ImportedEEvv(ptr {{[^,]*}} %this)
|
|
template void MemFunTmpl::importedNormal<ExplicitInst_Imported>();
|
|
USEMF(MemFunTmpl, importedNormal<ExplicitInst_Imported>)
|
|
|
|
// MSC-DAG: declare dllimport void @"??$importedStatic@UExplicitInst_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
// GNU-DAG: define weak_odr dso_local void @_ZN10MemFunTmpl14importedStaticI21ExplicitInst_ImportedEEvv()
|
|
template void MemFunTmpl::importedStatic<ExplicitInst_Imported>();
|
|
USE(MemFunTmpl::importedStatic<ExplicitInst_Imported>)
|
|
|
|
|
|
// Import specialization of an imported member function template.
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??$importedNormal@UExplicitSpec_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??$importedNormal@UExplicitSpec_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ExplicitSpec_ImportedEEvv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN10MemFunTmpl14importedNormalI21ExplicitSpec_ImportedEEvv(ptr {{[^,]*}})
|
|
template<> __declspec(dllimport) void MemFunTmpl::importedNormal<ExplicitSpec_Imported>();
|
|
USEMF(MemFunTmpl, importedNormal<ExplicitSpec_Imported>)
|
|
|
|
// M32-DAG-FIXME: declare dllimport x86_thiscallcc void @"??$importedNormal@UExplicitSpec_Def_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG-FIXME: declare dllimport void @"??$importedNormal@UExplicitSpec_Def_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
#ifdef MSABI
|
|
//template<> __declspec(dllimport) void MemFunTmpl::importedNormal<ExplicitSpec_Def_Imported>() {}
|
|
//USEMF(MemFunTmpl, importedNormal<ExplicitSpec_Def_Imported>)
|
|
#endif
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??$importedNormal@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??$importedNormal@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI31ExplicitSpec_InlineDef_ImportedEEvv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl14importedNormalI31ExplicitSpec_InlineDef_ImportedEEvv(ptr {{[^,]*}} %this)
|
|
template<> __declspec(dllimport) inline void MemFunTmpl::importedNormal<ExplicitSpec_InlineDef_Imported>() {}
|
|
USEMF(MemFunTmpl, importedNormal<ExplicitSpec_InlineDef_Imported>)
|
|
|
|
|
|
// MSC-DAG: declare dllimport void @"??$importedStatic@UExplicitSpec_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
// GNU-DAG: declare dllimport void @_ZN10MemFunTmpl14importedStaticI21ExplicitSpec_ImportedEEvv()
|
|
template<> __declspec(dllimport) void MemFunTmpl::importedStatic<ExplicitSpec_Imported>();
|
|
USE(MemFunTmpl::importedStatic<ExplicitSpec_Imported>)
|
|
|
|
// MSC-DAG-FIXME: declare dllimport void @"??$importedStatic@UExplicitSpec_Def_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
#ifdef MSABI
|
|
//template<> __declspec(dllimport) void MemFunTmpl::importedStatic<ExplicitSpec_Def_Imported>() {}
|
|
//USE(MemFunTmpl::importedStatic<ExplicitSpec_Def_Imported>)
|
|
#endif
|
|
|
|
// MSC-DAG: declare dllimport void @"??$importedStatic@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
// GNU-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl14importedStaticI31ExplicitSpec_InlineDef_ImportedEEvv()
|
|
template<> __declspec(dllimport) inline void MemFunTmpl::importedStatic<ExplicitSpec_InlineDef_Imported>() {}
|
|
USE(MemFunTmpl::importedStatic<ExplicitSpec_InlineDef_Imported>)
|
|
|
|
|
|
// Not importing specialization of an imported member function template without
|
|
// explicit dllimport.
|
|
// M32-DAG: define dso_local x86_thiscallcc void @"??$importedNormal@UExplicitSpec_NotImported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}} %this)
|
|
// M64-DAG: define dso_local void @"??$importedNormal@UExplicitSpec_NotImported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}} %this)
|
|
// G32-DAG: define dso_local x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI24ExplicitSpec_NotImportedEEvv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define dso_local void @_ZN10MemFunTmpl14importedNormalI24ExplicitSpec_NotImportedEEvv(ptr {{[^,]*}} %this)
|
|
template<> void MemFunTmpl::importedNormal<ExplicitSpec_NotImported>() {}
|
|
USEMF(MemFunTmpl, importedNormal<ExplicitSpec_NotImported>)
|
|
|
|
// MSC-DAG: define dso_local void @"??$importedStatic@UExplicitSpec_NotImported@@@MemFunTmpl@@SAXXZ"()
|
|
// GNU-DAG: define dso_local void @_ZN10MemFunTmpl14importedStaticI24ExplicitSpec_NotImportedEEvv()
|
|
template<> void MemFunTmpl::importedStatic<ExplicitSpec_NotImported>() {}
|
|
USE(MemFunTmpl::importedStatic<ExplicitSpec_NotImported>)
|
|
|
|
|
|
// Import explicit instantiation declaration of a non-imported member function
|
|
// template.
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??$normalDef@UExplicitDecl_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??$normalDef@UExplicitDecl_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dso_local x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ImportedEEvv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dso_local void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ImportedEEvv(ptr {{[^,]*}})
|
|
extern template __declspec(dllimport) void MemFunTmpl::normalDef<ExplicitDecl_Imported>();
|
|
USEMF(MemFunTmpl, normalDef<ExplicitDecl_Imported>)
|
|
|
|
// MSC-DAG: declare dllimport void @"??$staticDef@UExplicitDecl_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
// GNU-DAG: declare dso_local void @_ZN10MemFunTmpl9staticDefI21ExplicitDecl_ImportedEEvv()
|
|
extern template __declspec(dllimport) void MemFunTmpl::staticDef<ExplicitDecl_Imported>();
|
|
USE(MemFunTmpl::staticDef<ExplicitDecl_Imported>)
|
|
|
|
|
|
// Import explicit instantiation definition of a non-imported member function
|
|
// template.
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??$normalDef@UExplicitInst_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??$normalDef@UExplicitInst_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define weak_odr dso_local x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ImportedEEvv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define weak_odr dso_local void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ImportedEEvv(ptr {{[^,]*}} %this)
|
|
template __declspec(dllimport) void MemFunTmpl::normalDef<ExplicitInst_Imported>();
|
|
USEMF(MemFunTmpl, normalDef<ExplicitInst_Imported>)
|
|
|
|
// MSC-DAG: declare dllimport void @"??$staticDef@UExplicitInst_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
// GNU-DAG: define weak_odr dso_local void @_ZN10MemFunTmpl9staticDefI21ExplicitInst_ImportedEEvv()
|
|
template __declspec(dllimport) void MemFunTmpl::staticDef<ExplicitInst_Imported>();
|
|
USE(MemFunTmpl::staticDef<ExplicitInst_Imported>)
|
|
|
|
|
|
// Import specialization of a non-imported member function template.
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??$normalDef@UExplicitSpec_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??$normalDef@UExplicitSpec_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitSpec_ImportedEEvv(ptr {{[^,]*}})
|
|
// G64-DAG: declare dllimport void @_ZN10MemFunTmpl9normalDefI21ExplicitSpec_ImportedEEvv(ptr {{[^,]*}})
|
|
template<> __declspec(dllimport) void MemFunTmpl::normalDef<ExplicitSpec_Imported>();
|
|
USEMF(MemFunTmpl, normalDef<ExplicitSpec_Imported>)
|
|
|
|
// M32-DAG-FIXME: declare dllimport x86_thiscallcc void @"??$normalDef@UExplicitSpec_Def_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG-FIXME: declare dllimport void @"??$normalDef@UExplicitSpec_Def_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
#ifdef MSABI
|
|
//template<> __declspec(dllimport) void MemFunTmpl::normalDef<ExplicitSpec_Def_Imported>() {}
|
|
//USEMF(MemFunTmpl, normalDef<ExplicitSpec_Def_Imported>)
|
|
#endif
|
|
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"??$normalDef@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QAEXXZ"(ptr {{[^,]*}})
|
|
// M64-DAG: declare dllimport void @"??$normalDef@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QEAAXXZ"(ptr {{[^,]*}})
|
|
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ImportedEEvv(ptr {{[^,]*}} %this)
|
|
// G64-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ImportedEEvv(ptr {{[^,]*}} %this)
|
|
template<> __declspec(dllimport) inline void MemFunTmpl::normalDef<ExplicitSpec_InlineDef_Imported>() {}
|
|
USEMF(MemFunTmpl, normalDef<ExplicitSpec_InlineDef_Imported>)
|
|
|
|
|
|
// MSC-DAG: declare dllimport void @"??$staticDef@UExplicitSpec_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
// GNU-DAG: declare dllimport void @_ZN10MemFunTmpl9staticDefI21ExplicitSpec_ImportedEEvv()
|
|
template<> __declspec(dllimport) void MemFunTmpl::staticDef<ExplicitSpec_Imported>();
|
|
USE(MemFunTmpl::staticDef<ExplicitSpec_Imported>)
|
|
|
|
// MSC-DAG-FIXME: declare dllimport void @"??$staticDef@UExplicitSpec_Def_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
#ifdef MSABI
|
|
//template<> __declspec(dllimport) void MemFunTmpl::staticDef<ExplicitSpec_Def_Imported>() {}
|
|
//USE(MemFunTmpl::staticDef<ExplicitSpec_Def_Imported>)
|
|
#endif
|
|
|
|
// MSC-DAG: declare dllimport void @"??$staticDef@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@SAXXZ"()
|
|
// GNU-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl9staticDefI31ExplicitSpec_InlineDef_ImportedEEvv()
|
|
template<> __declspec(dllimport) inline void MemFunTmpl::staticDef<ExplicitSpec_InlineDef_Imported>() {}
|
|
USE(MemFunTmpl::staticDef<ExplicitSpec_InlineDef_Imported>)
|
|
|
|
|
|
|
|
struct MemVarTmpl {
|
|
template<typename T> static const int StaticVar = 1;
|
|
template<typename T> __declspec(dllimport) static const int ImportedStaticVar = 1;
|
|
};
|
|
|
|
// Import implicit instantiation of an imported member variable template.
|
|
// MSC-DAG: @"??$ImportedStaticVar@UImplicitInst_Imported@@@MemVarTmpl@@2HB" = available_externally dllimport constant i32 1, align 4
|
|
// GNU-DAG: @_ZN10MemVarTmpl17ImportedStaticVarI21ImplicitInst_ImportedEE = external dllimport constant i32
|
|
USEMV(MemVarTmpl, ImportedStaticVar<ImplicitInst_Imported>)
|
|
|
|
// Import explicit instantiation declaration of an imported member variable
|
|
// template.
|
|
// MSC-DAG: @"??$ImportedStaticVar@UExplicitDecl_Imported@@@MemVarTmpl@@2HB" = available_externally dllimport constant i32 1
|
|
// GNU-DAG: @_ZN10MemVarTmpl17ImportedStaticVarI21ExplicitDecl_ImportedEE = external dllimport constant i32
|
|
extern template const int MemVarTmpl::ImportedStaticVar<ExplicitDecl_Imported>;
|
|
USEMV(MemVarTmpl, ImportedStaticVar<ExplicitDecl_Imported>)
|
|
|
|
// An explicit instantiation definition of an imported member variable template
|
|
// cannot be imported because the template must be defined which is illegal. The
|
|
// in-class initializer does not count.
|
|
|
|
// Import specialization of an imported member variable template.
|
|
// MSC-DAG: @"??$ImportedStaticVar@UExplicitSpec_Imported@@@MemVarTmpl@@2HB" = external dllimport constant i32
|
|
// GNU-DAG: @_ZN10MemVarTmpl17ImportedStaticVarI21ExplicitSpec_ImportedEE = external dllimport constant i32
|
|
template<> __declspec(dllimport) const int MemVarTmpl::ImportedStaticVar<ExplicitSpec_Imported>;
|
|
USEMV(MemVarTmpl, ImportedStaticVar<ExplicitSpec_Imported>)
|
|
|
|
// Not importing specialization of a member variable template without explicit
|
|
// dllimport.
|
|
// MSC-DAG: @"??$ImportedStaticVar@UExplicitSpec_NotImported@@@MemVarTmpl@@2HB" = external dso_local constant i32
|
|
// GNU-DAG: @_ZN10MemVarTmpl17ImportedStaticVarI24ExplicitSpec_NotImportedEE = external constant i32
|
|
template<> const int MemVarTmpl::ImportedStaticVar<ExplicitSpec_NotImported>;
|
|
USEMV(MemVarTmpl, ImportedStaticVar<ExplicitSpec_NotImported>)
|
|
|
|
|
|
// Import explicit instantiation declaration of a non-imported member variable
|
|
// template.
|
|
// MSC-DAG: @"??$StaticVar@UExplicitDecl_Imported@@@MemVarTmpl@@2HB" = available_externally dllimport constant i32 1
|
|
// GNU-DAG: @_ZN10MemVarTmpl9StaticVarI21ExplicitDecl_ImportedEE = external dllimport constant i32
|
|
extern template __declspec(dllimport) const int MemVarTmpl::StaticVar<ExplicitDecl_Imported>;
|
|
USEMV(MemVarTmpl, StaticVar<ExplicitDecl_Imported>)
|
|
|
|
// An explicit instantiation definition of a non-imported member variable template
|
|
// cannot be imported because the template must be defined which is illegal. The
|
|
// in-class initializer does not count.
|
|
|
|
// Import specialization of a non-imported member variable template.
|
|
// MSC-DAG: @"??$StaticVar@UExplicitSpec_Imported@@@MemVarTmpl@@2HB" = external dllimport constant i32
|
|
// GNU-DAG: @_ZN10MemVarTmpl9StaticVarI21ExplicitSpec_ImportedEE = external dllimport constant i32
|
|
template<> __declspec(dllimport) const int MemVarTmpl::StaticVar<ExplicitSpec_Imported>;
|
|
USEMV(MemVarTmpl, StaticVar<ExplicitSpec_Imported>)
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Class template members
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
template <typename> struct ClassTmplMem {
|
|
void __declspec(dllimport) importedNormal();
|
|
static void __declspec(dllimport) importedStatic();
|
|
};
|
|
// MSVC imports explicit specialization of imported class template member function; MinGW does not.
|
|
// M32-DAG: declare dllimport x86_thiscallcc void @"?importedNormal@?$ClassTmplMem@H@@QAEXXZ"
|
|
// G32-DAG: declare dso_local x86_thiscallcc void @_ZN12ClassTmplMemIiE14importedNormalEv
|
|
template<> void ClassTmplMem<int>::importedNormal();
|
|
USEMF(ClassTmplMem<int>, importedNormal);
|
|
|
|
// M32-DAG: declare dllimport void @"?importedStatic@?$ClassTmplMem@H@@SAXXZ"
|
|
// G32-DAG: declare dso_local void @_ZN12ClassTmplMemIiE14importedStaticEv
|
|
template<> void ClassTmplMem<int>::importedStatic();
|
|
USEMF(ClassTmplMem<int>, importedStatic);
|