Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple i686-windows-msvc -fms-compatibility -emit-llvm -std=c++1y -O0 -o - %s -DMSABI | FileCheck --check-prefix=MSC --check-prefix=M32 %s |
| 2 | // RUN: %clang_cc1 -triple x86_64-windows-msvc -fms-compatibility -emit-llvm -std=c++1y -O0 -o - %s -DMSABI | FileCheck --check-prefix=MSC --check-prefix=M64 %s |
| 3 | // RUN: %clang_cc1 -triple i686-windows-gnu -emit-llvm -std=c++1y -O0 -o - %s | FileCheck --check-prefix=GNU --check-prefix=G32 %s |
| 4 | // RUN: %clang_cc1 -triple x86_64-windows-gnu -emit-llvm -std=c++1y -O0 -o - %s | FileCheck --check-prefix=GNU --check-prefix=G64 %s |
| 5 | // RUN: %clang_cc1 -triple i686-windows-msvc -fms-compatibility -emit-llvm -std=c++1y -O1 -o - %s -DMSABI | FileCheck --check-prefix=MO1 %s |
| 6 | // RUN: %clang_cc1 -triple i686-windows-gnu -emit-llvm -std=c++1y -O1 -o - %s | FileCheck --check-prefix=GO1 %s |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 7 | |
| 8 | // Helper structs to make templates more expressive. |
| 9 | struct ImplicitInst_Imported {}; |
| 10 | struct ExplicitDecl_Imported {}; |
| 11 | struct ExplicitInst_Imported {}; |
| 12 | struct ExplicitSpec_Imported {}; |
| 13 | struct ExplicitSpec_Def_Imported {}; |
| 14 | struct ExplicitSpec_InlineDef_Imported {}; |
| 15 | struct ExplicitSpec_NotImported {}; |
| 16 | |
| 17 | #define JOIN2(x, y) x##y |
| 18 | #define JOIN(x, y) JOIN2(x, y) |
| 19 | #define UNIQ(name) JOIN(name, __LINE__) |
| 20 | #define USE(func) void UNIQ(use)() { func(); } |
| 21 | #define USEMV(cls, var) int UNIQ(use)() { return ref(cls::var); } |
| 22 | #define USEMF(cls, fun) template<> void useMemFun<__LINE__, cls>() { cls().fun(); } |
| 23 | #define USESPECIALS(cls) void UNIQ(use)() { useSpecials<cls>(); } |
| 24 | |
| 25 | template<typename T> |
| 26 | T ref(T const& v) { return v; } |
| 27 | |
| 28 | template<int Line, typename T> |
| 29 | void useMemFun(); |
| 30 | |
| 31 | template<typename T> |
| 32 | void useSpecials() { |
| 33 | T v; // Default constructor |
| 34 | |
| 35 | T c1(static_cast<const T&>(v)); // Copy constructor |
| 36 | T c2 = static_cast<const T&>(v); // Copy constructor |
| 37 | T c3; |
| 38 | c3 = static_cast<const T&>(v); // Copy assignment |
| 39 | |
| 40 | T m1(static_cast<T&&>(v)); // Move constructor |
| 41 | T m2 = static_cast<T&&>(v); // Move constructor |
| 42 | T m3; |
| 43 | m3 = static_cast<T&&>(v); // Move assignment |
| 44 | } |
| 45 | |
| 46 | // Used to force non-trivial special members. |
| 47 | struct ForceNonTrivial { |
| 48 | ForceNonTrivial(); |
| 49 | ~ForceNonTrivial(); |
| 50 | ForceNonTrivial(const ForceNonTrivial&); |
| 51 | ForceNonTrivial& operator=(const ForceNonTrivial&); |
| 52 | ForceNonTrivial(ForceNonTrivial&&); |
| 53 | ForceNonTrivial& operator=(ForceNonTrivial&&); |
| 54 | }; |
| 55 | |
| 56 | |
| 57 | |
| 58 | //===----------------------------------------------------------------------===// |
| 59 | // Class members |
| 60 | //===----------------------------------------------------------------------===// |
| 61 | |
| 62 | // Import individual members of a class. |
| 63 | struct ImportMembers { |
| 64 | struct Nested; |
| 65 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 66 | // M32-DAG: define x86_thiscallcc void @"\01?normalDef@ImportMembers@@QAEXXZ"(%struct.ImportMembers* %this) |
| 67 | // M64-DAG: define void @"\01?normalDef@ImportMembers@@QEAAXXZ"(%struct.ImportMembers* %this) |
| 68 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalDecl@ImportMembers@@QAEXXZ"(%struct.ImportMembers*) |
| 69 | // M64-DAG: declare dllimport void @"\01?normalDecl@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*) |
| 70 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInclass@ImportMembers@@QAEXXZ"(%struct.ImportMembers*) |
| 71 | // M64-DAG: declare dllimport void @"\01?normalInclass@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*) |
| 72 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDef@ImportMembers@@QAEXXZ"(%struct.ImportMembers*) |
| 73 | // M64-DAG: declare dllimport void @"\01?normalInlineDef@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*) |
| 74 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDecl@ImportMembers@@QAEXXZ"(%struct.ImportMembers*) |
| 75 | // M64-DAG: declare dllimport void @"\01?normalInlineDecl@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*) |
| 76 | // G32-DAG: define x86_thiscallcc void @_ZN13ImportMembers9normalDefEv(%struct.ImportMembers* %this) |
| 77 | // G64-DAG: define void @_ZN13ImportMembers9normalDefEv(%struct.ImportMembers* %this) |
| 78 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers10normalDeclEv(%struct.ImportMembers*) |
| 79 | // G64-DAG: declare dllimport void @_ZN13ImportMembers10normalDeclEv(%struct.ImportMembers*) |
| 80 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers13normalInclassEv(%struct.ImportMembers* %this) |
| 81 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers13normalInclassEv(%struct.ImportMembers* %this) |
| 82 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers15normalInlineDefEv(%struct.ImportMembers* %this) |
| 83 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers15normalInlineDefEv(%struct.ImportMembers* %this) |
| 84 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers16normalInlineDeclEv(%struct.ImportMembers* %this) |
| 85 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers16normalInlineDeclEv(%struct.ImportMembers* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 86 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInclass@ImportMembers@@QAEXXZ"( |
| 87 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInlineDef@ImportMembers@@QAEXXZ"( |
| 88 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInlineDecl@ImportMembers@@QAEXXZ"( |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 89 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers13normalInclassEv( |
| 90 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers15normalInlineDefEv( |
| 91 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers16normalInlineDeclEv( |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 92 | __declspec(dllimport) void normalDef(); // dllimport ignored |
| 93 | __declspec(dllimport) void normalDecl(); |
| 94 | __declspec(dllimport) void normalInclass() {} |
| 95 | __declspec(dllimport) void normalInlineDef(); |
| 96 | __declspec(dllimport) inline void normalInlineDecl(); |
| 97 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 98 | // M32-DAG: define x86_thiscallcc void @"\01?virtualDef@ImportMembers@@UAEXXZ"(%struct.ImportMembers* %this) |
| 99 | // M64-DAG: define void @"\01?virtualDef@ImportMembers@@UEAAXXZ"(%struct.ImportMembers* %this) |
| 100 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualDecl@ImportMembers@@UAEXXZ"(%struct.ImportMembers*) |
| 101 | // M64-DAG: declare dllimport void @"\01?virtualDecl@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*) |
| 102 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInclass@ImportMembers@@UAEXXZ"(%struct.ImportMembers*) |
| 103 | // M64-DAG: declare dllimport void @"\01?virtualInclass@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*) |
| 104 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDef@ImportMembers@@UAEXXZ"(%struct.ImportMembers*) |
| 105 | // M64-DAG: declare dllimport void @"\01?virtualInlineDef@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*) |
| 106 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDecl@ImportMembers@@UAEXXZ"(%struct.ImportMembers*) |
| 107 | // M64-DAG: declare dllimport void @"\01?virtualInlineDecl@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*) |
| 108 | // G32-DAG: define x86_thiscallcc void @_ZN13ImportMembers10virtualDefEv(%struct.ImportMembers* %this) |
| 109 | // G64-DAG: define void @_ZN13ImportMembers10virtualDefEv(%struct.ImportMembers* %this) |
| 110 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers11virtualDeclEv(%struct.ImportMembers*) |
| 111 | // G64-DAG: declare dllimport void @_ZN13ImportMembers11virtualDeclEv(%struct.ImportMembers*) |
| 112 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers14virtualInclassEv(%struct.ImportMembers* %this) |
| 113 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers14virtualInclassEv(%struct.ImportMembers* %this) |
| 114 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers16virtualInlineDefEv(%struct.ImportMembers* %this) |
| 115 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers16virtualInlineDefEv(%struct.ImportMembers* %this) |
| 116 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers17virtualInlineDeclEv(%struct.ImportMembers* %this) |
| 117 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers17virtualInlineDeclEv(%struct.ImportMembers* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 118 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInclass@ImportMembers@@UAEXXZ"( |
| 119 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInlineDef@ImportMembers@@UAEXXZ"( |
| 120 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInlineDecl@ImportMembers@@UAEXXZ"( |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 121 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers14virtualInclassEv( |
| 122 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers16virtualInlineDefEv( |
| 123 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers17virtualInlineDeclEv( |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 124 | __declspec(dllimport) virtual void virtualDef(); // dllimport ignored |
| 125 | __declspec(dllimport) virtual void virtualDecl(); |
| 126 | __declspec(dllimport) virtual void virtualInclass() {} |
| 127 | __declspec(dllimport) virtual void virtualInlineDef(); |
| 128 | __declspec(dllimport) virtual inline void virtualInlineDecl(); |
| 129 | |
| 130 | // MSC-DAG: define void @"\01?staticDef@ImportMembers@@SAXXZ"() |
| 131 | // MSC-DAG: declare dllimport void @"\01?staticDecl@ImportMembers@@SAXXZ"() |
| 132 | // MSC-DAG: declare dllimport void @"\01?staticInclass@ImportMembers@@SAXXZ"() |
| 133 | // MSC-DAG: declare dllimport void @"\01?staticInlineDef@ImportMembers@@SAXXZ"() |
| 134 | // MSC-DAG: declare dllimport void @"\01?staticInlineDecl@ImportMembers@@SAXXZ"() |
| 135 | // GNU-DAG: define void @_ZN13ImportMembers9staticDefEv() |
| 136 | // GNU-DAG: declare dllimport void @_ZN13ImportMembers10staticDeclEv() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 137 | // GNU-DAG: define linkonce_odr void @_ZN13ImportMembers13staticInclassEv() |
| 138 | // GNU-DAG: define linkonce_odr void @_ZN13ImportMembers15staticInlineDefEv() |
| 139 | // GNU-DAG: define linkonce_odr void @_ZN13ImportMembers16staticInlineDeclEv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 140 | // MO1-DAG: define available_externally dllimport void @"\01?staticInclass@ImportMembers@@SAXXZ"() |
| 141 | // MO1-DAG: define available_externally dllimport void @"\01?staticInlineDef@ImportMembers@@SAXXZ"() |
| 142 | // MO1-DAG: define available_externally dllimport void @"\01?staticInlineDecl@ImportMembers@@SAXXZ"() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 143 | // GO1-DAG: define linkonce_odr void @_ZN13ImportMembers13staticInclassEv() |
| 144 | // GO1-DAG: define linkonce_odr void @_ZN13ImportMembers15staticInlineDefEv() |
| 145 | // GO1-DAG: define linkonce_odr void @_ZN13ImportMembers16staticInlineDeclEv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 146 | __declspec(dllimport) static void staticDef(); // dllimport ignored |
| 147 | __declspec(dllimport) static void staticDecl(); |
| 148 | __declspec(dllimport) static void staticInclass() {} |
| 149 | __declspec(dllimport) static void staticInlineDef(); |
| 150 | __declspec(dllimport) static inline void staticInlineDecl(); |
| 151 | |
| 152 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?protectedNormalDecl@ImportMembers@@IAEXXZ"(%struct.ImportMembers*) |
| 153 | // M64-DAG: declare dllimport void @"\01?protectedNormalDecl@ImportMembers@@IEAAXXZ"(%struct.ImportMembers*) |
| 154 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers19protectedNormalDeclEv(%struct.ImportMembers*) |
| 155 | // G64-DAG: declare dllimport void @_ZN13ImportMembers19protectedNormalDeclEv(%struct.ImportMembers*) |
| 156 | // MSC-DAG: declare dllimport void @"\01?protectedStaticDecl@ImportMembers@@KAXXZ"() |
| 157 | // GNU-DAG: declare dllimport void @_ZN13ImportMembers19protectedStaticDeclEv() |
| 158 | protected: |
| 159 | __declspec(dllimport) void protectedNormalDecl(); |
| 160 | __declspec(dllimport) static void protectedStaticDecl(); |
| 161 | |
| 162 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?privateNormalDecl@ImportMembers@@AAEXXZ"(%struct.ImportMembers*) |
| 163 | // M64-DAG: declare dllimport void @"\01?privateNormalDecl@ImportMembers@@AEAAXXZ"(%struct.ImportMembers*) |
| 164 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers17privateNormalDeclEv(%struct.ImportMembers*) |
| 165 | // G64-DAG: declare dllimport void @_ZN13ImportMembers17privateNormalDeclEv(%struct.ImportMembers*) |
| 166 | // MSC-DAG: declare dllimport void @"\01?privateStaticDecl@ImportMembers@@CAXXZ"() |
| 167 | // GNU-DAG: declare dllimport void @_ZN13ImportMembers17privateStaticDeclEv() |
| 168 | private: |
| 169 | __declspec(dllimport) void privateNormalDecl(); |
| 170 | __declspec(dllimport) static void privateStaticDecl(); |
| 171 | |
| 172 | // M32-DAG: declare x86_thiscallcc void @"\01?ignored@ImportMembers@@QAEXXZ"(%struct.ImportMembers*) |
| 173 | // M64-DAG: declare void @"\01?ignored@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*) |
| 174 | // G32-DAG: declare x86_thiscallcc void @_ZN13ImportMembers7ignoredEv(%struct.ImportMembers*) |
| 175 | // G64-DAG: declare void @_ZN13ImportMembers7ignoredEv(%struct.ImportMembers*) |
| 176 | public: |
| 177 | void ignored(); |
| 178 | |
| 179 | // MSC-DAG: @"\01?StaticField@ImportMembers@@2HA" = external dllimport global i32 |
| 180 | // MSC-DAG: @"\01?StaticConstField@ImportMembers@@2HB" = external dllimport constant i32 |
Stephen Hines | c568f1e | 2014-07-21 00:47:37 -0700 | [diff] [blame] | 181 | // MSC-DAG: @"\01?StaticConstFieldEqualInit@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4 |
| 182 | // MSC-DAG: @"\01?StaticConstFieldBraceInit@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4 |
| 183 | // MSC-DAG: @"\01?ConstexprField@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4 |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 184 | // GNU-DAG: @_ZN13ImportMembers11StaticFieldE = external dllimport global i32 |
| 185 | // GNU-DAG: @_ZN13ImportMembers16StaticConstFieldE = external dllimport constant i32 |
| 186 | // GNU-DAG: @_ZN13ImportMembers25StaticConstFieldEqualInitE = external dllimport constant i32 |
| 187 | // GNU-DAG: @_ZN13ImportMembers25StaticConstFieldBraceInitE = external dllimport constant i32 |
| 188 | // GNU-DAG: @_ZN13ImportMembers14ConstexprFieldE = external dllimport constant i32 |
| 189 | __declspec(dllimport) static int StaticField; |
| 190 | __declspec(dllimport) static const int StaticConstField; |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 191 | __declspec(dllimport) static const int StaticConstFieldEqualInit = 1; |
| 192 | __declspec(dllimport) static const int StaticConstFieldBraceInit{1}; |
| 193 | __declspec(dllimport) constexpr static int ConstexprField = 1; |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 194 | |
| 195 | template<int Line, typename T> friend void useMemFun(); |
| 196 | }; |
| 197 | |
| 198 | void ImportMembers::normalDef() {} // dllimport ignored |
| 199 | inline void ImportMembers::normalInlineDef() {} |
| 200 | void ImportMembers::normalInlineDecl() {} |
| 201 | void ImportMembers::virtualDef() {} // dllimport ignored |
| 202 | inline void ImportMembers::virtualInlineDef() {} |
| 203 | void ImportMembers::virtualInlineDecl() {} |
| 204 | void ImportMembers::staticDef() {} // dllimport ignored |
| 205 | inline void ImportMembers::staticInlineDef() {} |
| 206 | void ImportMembers::staticInlineDecl() {} |
| 207 | |
| 208 | USEMF(ImportMembers, normalDef) |
| 209 | USEMF(ImportMembers, normalDecl) |
| 210 | USEMF(ImportMembers, normalInclass) |
| 211 | USEMF(ImportMembers, normalInlineDef) |
| 212 | USEMF(ImportMembers, normalInlineDecl) |
| 213 | USEMF(ImportMembers, virtualDef) |
| 214 | USEMF(ImportMembers, virtualDecl) |
| 215 | USEMF(ImportMembers, virtualInclass) |
| 216 | USEMF(ImportMembers, virtualInlineDef) |
| 217 | USEMF(ImportMembers, virtualInlineDecl) |
| 218 | USEMF(ImportMembers, staticDef) |
| 219 | USEMF(ImportMembers, staticDecl) |
| 220 | USEMF(ImportMembers, staticInclass) |
| 221 | USEMF(ImportMembers, staticInlineDef) |
| 222 | USEMF(ImportMembers, staticInlineDecl) |
| 223 | USEMF(ImportMembers, protectedNormalDecl) |
| 224 | USEMF(ImportMembers, protectedStaticDecl) |
| 225 | USEMF(ImportMembers, privateNormalDecl) |
| 226 | USEMF(ImportMembers, privateStaticDecl) |
| 227 | USEMF(ImportMembers, ignored) |
| 228 | |
| 229 | USEMV(ImportMembers, StaticField) |
| 230 | USEMV(ImportMembers, StaticConstField) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 231 | USEMV(ImportMembers, StaticConstFieldEqualInit) |
| 232 | USEMV(ImportMembers, StaticConstFieldBraceInit) |
| 233 | USEMV(ImportMembers, ConstexprField) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 234 | |
| 235 | |
| 236 | // Import individual members of a nested class. |
| 237 | struct ImportMembers::Nested { |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 238 | // M32-DAG: define x86_thiscallcc void @"\01?normalDef@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"* %this) |
| 239 | // M64-DAG: define void @"\01?normalDef@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"* %this) |
| 240 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalDecl@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 241 | // M64-DAG: declare dllimport void @"\01?normalDecl@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 242 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInclass@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 243 | // M64-DAG: declare dllimport void @"\01?normalInclass@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 244 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDef@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 245 | // M64-DAG: declare dllimport void @"\01?normalInlineDef@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 246 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDecl@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 247 | // M64-DAG: declare dllimport void @"\01?normalInlineDecl@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 248 | // G32-DAG: define x86_thiscallcc void @_ZN13ImportMembers6Nested9normalDefEv(%"struct.ImportMembers::Nested"* %this) |
| 249 | // G64-DAG: define void @_ZN13ImportMembers6Nested9normalDefEv(%"struct.ImportMembers::Nested"* %this) |
| 250 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers6Nested10normalDeclEv(%"struct.ImportMembers::Nested"*) |
| 251 | // G64-DAG: declare dllimport void @_ZN13ImportMembers6Nested10normalDeclEv(%"struct.ImportMembers::Nested"*) |
| 252 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested13normalInclassEv(%"struct.ImportMembers::Nested"* %this) |
| 253 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested13normalInclassEv(%"struct.ImportMembers::Nested"* %this) |
| 254 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested15normalInlineDefEv(%"struct.ImportMembers::Nested"* %this) |
| 255 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested15normalInlineDefEv(%"struct.ImportMembers::Nested"* %this) |
| 256 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested16normalInlineDeclEv(%"struct.ImportMembers::Nested"* %this) |
| 257 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested16normalInlineDeclEv(%"struct.ImportMembers::Nested"* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 258 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInclass@Nested@ImportMembers@@QAEXXZ"( |
| 259 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInlineDef@Nested@ImportMembers@@QAEXXZ"( |
| 260 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInlineDecl@Nested@ImportMembers@@QAEXXZ"( |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 261 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested13normalInclassEv( |
| 262 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested15normalInlineDefEv( |
| 263 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested16normalInlineDeclEv( |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 264 | __declspec(dllimport) void normalDef(); // dllimport ignored |
| 265 | __declspec(dllimport) void normalDecl(); |
| 266 | __declspec(dllimport) void normalInclass() {} |
| 267 | __declspec(dllimport) void normalInlineDef(); |
| 268 | __declspec(dllimport) inline void normalInlineDecl(); |
| 269 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 270 | // M32-DAG: define x86_thiscallcc void @"\01?virtualDef@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"* %this) |
| 271 | // M64-DAG: define void @"\01?virtualDef@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"* %this) |
| 272 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualDecl@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 273 | // M64-DAG: declare dllimport void @"\01?virtualDecl@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 274 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInclass@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 275 | // M64-DAG: declare dllimport void @"\01?virtualInclass@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 276 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDef@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 277 | // M64-DAG: declare dllimport void @"\01?virtualInlineDef@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 278 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDecl@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 279 | // M64-DAG: declare dllimport void @"\01?virtualInlineDecl@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 280 | // G32-DAG: define x86_thiscallcc void @_ZN13ImportMembers6Nested10virtualDefEv(%"struct.ImportMembers::Nested"* %this) |
| 281 | // G64-DAG: define void @_ZN13ImportMembers6Nested10virtualDefEv(%"struct.ImportMembers::Nested"* %this) |
| 282 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers6Nested11virtualDeclEv(%"struct.ImportMembers::Nested"*) |
| 283 | // G64-DAG: declare dllimport void @_ZN13ImportMembers6Nested11virtualDeclEv(%"struct.ImportMembers::Nested"*) |
| 284 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested14virtualInclassEv(%"struct.ImportMembers::Nested"* %this) |
| 285 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested14virtualInclassEv(%"struct.ImportMembers::Nested"* %this) |
| 286 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested16virtualInlineDefEv(%"struct.ImportMembers::Nested"* %this) |
| 287 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested16virtualInlineDefEv(%"struct.ImportMembers::Nested"* %this) |
| 288 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(%"struct.ImportMembers::Nested"* %this) |
| 289 | // G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(%"struct.ImportMembers::Nested"* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 290 | |
| 291 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInclass@Nested@ImportMembers@@UAEXXZ"( |
| 292 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInlineDef@Nested@ImportMembers@@UAEXXZ"( |
| 293 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInlineDecl@Nested@ImportMembers@@UAEXXZ"( |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 294 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested14virtualInclassEv( |
| 295 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested16virtualInlineDefEv( |
| 296 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested17virtualInlineDeclEv( |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 297 | __declspec(dllimport) virtual void virtualDef(); // dllimport ignored |
| 298 | __declspec(dllimport) virtual void virtualDecl(); |
| 299 | __declspec(dllimport) virtual void virtualInclass() {} |
| 300 | __declspec(dllimport) virtual void virtualInlineDef(); |
| 301 | __declspec(dllimport) virtual inline void virtualInlineDecl(); |
| 302 | |
| 303 | // MSC-DAG: define void @"\01?staticDef@Nested@ImportMembers@@SAXXZ"() |
| 304 | // MSC-DAG: declare dllimport void @"\01?staticDecl@Nested@ImportMembers@@SAXXZ"() |
| 305 | // MSC-DAG: declare dllimport void @"\01?staticInclass@Nested@ImportMembers@@SAXXZ"() |
| 306 | // MSC-DAG: declare dllimport void @"\01?staticInlineDef@Nested@ImportMembers@@SAXXZ"() |
| 307 | // MSC-DAG: declare dllimport void @"\01?staticInlineDecl@Nested@ImportMembers@@SAXXZ"() |
| 308 | // GNU-DAG: define void @_ZN13ImportMembers6Nested9staticDefEv() |
| 309 | // GNU-DAG: declare dllimport void @_ZN13ImportMembers6Nested10staticDeclEv() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 310 | // GNU-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested13staticInclassEv() |
| 311 | // GNU-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested15staticInlineDefEv() |
| 312 | // GNU-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested16staticInlineDeclEv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 313 | // MO1-DAG: define available_externally dllimport void @"\01?staticInclass@Nested@ImportMembers@@SAXXZ"() |
| 314 | // MO1-DAG: define available_externally dllimport void @"\01?staticInlineDef@Nested@ImportMembers@@SAXXZ"() |
| 315 | // MO1-DAG: define available_externally dllimport void @"\01?staticInlineDecl@Nested@ImportMembers@@SAXXZ"() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 316 | // GO1-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested13staticInclassEv() |
| 317 | // GO1-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested15staticInlineDefEv() |
| 318 | // GO1-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested16staticInlineDeclEv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 319 | __declspec(dllimport) static void staticDef(); // dllimport ignored |
| 320 | __declspec(dllimport) static void staticDecl(); |
| 321 | __declspec(dllimport) static void staticInclass() {} |
| 322 | __declspec(dllimport) static void staticInlineDef(); |
| 323 | __declspec(dllimport) static inline void staticInlineDecl(); |
| 324 | |
| 325 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?protectedNormalDecl@Nested@ImportMembers@@IAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 326 | // M64-DAG: declare dllimport void @"\01?protectedNormalDecl@Nested@ImportMembers@@IEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 327 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers6Nested19protectedNormalDeclEv(%"struct.ImportMembers::Nested"*) |
| 328 | // G64-DAG: declare dllimport void @_ZN13ImportMembers6Nested19protectedNormalDeclEv(%"struct.ImportMembers::Nested"*) |
| 329 | // MSC-DAG: declare dllimport void @"\01?protectedStaticDecl@Nested@ImportMembers@@KAXXZ"() |
| 330 | // GNU-DAG: declare dllimport void @_ZN13ImportMembers6Nested19protectedStaticDeclEv() |
| 331 | protected: |
| 332 | __declspec(dllimport) void protectedNormalDecl(); |
| 333 | __declspec(dllimport) static void protectedStaticDecl(); |
| 334 | |
| 335 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01?privateNormalDecl@Nested@ImportMembers@@AAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 336 | // M64-DAG: declare dllimport void @"\01?privateNormalDecl@Nested@ImportMembers@@AEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 337 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers6Nested17privateNormalDeclEv(%"struct.ImportMembers::Nested"*) |
| 338 | // G64-DAG: declare dllimport void @_ZN13ImportMembers6Nested17privateNormalDeclEv(%"struct.ImportMembers::Nested"*) |
| 339 | // MSC-DAG: declare dllimport void @"\01?privateStaticDecl@Nested@ImportMembers@@CAXXZ"() |
| 340 | // GNU-DAG: declare dllimport void @_ZN13ImportMembers6Nested17privateStaticDeclEv() |
| 341 | private: |
| 342 | __declspec(dllimport) void privateNormalDecl(); |
| 343 | __declspec(dllimport) static void privateStaticDecl(); |
| 344 | |
| 345 | // M32-DAG: declare x86_thiscallcc void @"\01?ignored@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*) |
| 346 | // M64-DAG: declare void @"\01?ignored@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*) |
| 347 | // G32-DAG: declare x86_thiscallcc void @_ZN13ImportMembers6Nested7ignoredEv(%"struct.ImportMembers::Nested"*) |
| 348 | // G64-DAG: declare void @_ZN13ImportMembers6Nested7ignoredEv(%"struct.ImportMembers::Nested"*) |
| 349 | public: |
| 350 | void ignored(); |
| 351 | |
| 352 | // MSC-DAG: @"\01?StaticField@Nested@ImportMembers@@2HA" = external dllimport global i32 |
| 353 | // MSC-DAG: @"\01?StaticConstField@Nested@ImportMembers@@2HB" = external dllimport constant i32 |
Stephen Hines | c568f1e | 2014-07-21 00:47:37 -0700 | [diff] [blame] | 354 | // MSC-DAG: @"\01?StaticConstFieldEqualInit@Nested@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4 |
| 355 | // MSC-DAG: @"\01?StaticConstFieldBraceInit@Nested@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4 |
| 356 | // MSC-DAG: @"\01?ConstexprField@Nested@ImportMembers@@2HB" = available_externally dllimport constant i32 1, align 4 |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 357 | // GNU-DAG: @_ZN13ImportMembers6Nested11StaticFieldE = external dllimport global i32 |
| 358 | // GNU-DAG: @_ZN13ImportMembers6Nested16StaticConstFieldE = external dllimport constant i32 |
| 359 | // GNU-DAG: @_ZN13ImportMembers6Nested25StaticConstFieldEqualInitE = external dllimport constant i32 |
| 360 | // GNU-DAG: @_ZN13ImportMembers6Nested25StaticConstFieldBraceInitE = external dllimport constant i32 |
| 361 | // GNU-DAG: @_ZN13ImportMembers6Nested14ConstexprFieldE = external dllimport constant i32 |
| 362 | __declspec(dllimport) static int StaticField; |
| 363 | __declspec(dllimport) static const int StaticConstField; |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 364 | __declspec(dllimport) static const int StaticConstFieldEqualInit = 1; |
| 365 | __declspec(dllimport) static const int StaticConstFieldBraceInit{1}; |
| 366 | __declspec(dllimport) constexpr static int ConstexprField = 1; |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 367 | |
| 368 | template<int Line, typename T> friend void useMemFun(); |
| 369 | }; |
| 370 | |
| 371 | void ImportMembers::Nested::normalDef() {} // dllimport ignored |
| 372 | inline void ImportMembers::Nested::normalInlineDef() {} |
| 373 | void ImportMembers::Nested::normalInlineDecl() {} |
| 374 | void ImportMembers::Nested::virtualDef() {} // dllimport ignored |
| 375 | inline void ImportMembers::Nested::virtualInlineDef() {} |
| 376 | void ImportMembers::Nested::virtualInlineDecl() {} |
| 377 | void ImportMembers::Nested::staticDef() {} // dllimport ignored |
| 378 | inline void ImportMembers::Nested::staticInlineDef() {} |
| 379 | void ImportMembers::Nested::staticInlineDecl() {} |
| 380 | |
| 381 | USEMF(ImportMembers::Nested, normalDef) |
| 382 | USEMF(ImportMembers::Nested, normalDecl) |
| 383 | USEMF(ImportMembers::Nested, normalInclass) |
| 384 | USEMF(ImportMembers::Nested, normalInlineDef) |
| 385 | USEMF(ImportMembers::Nested, normalInlineDecl) |
| 386 | USEMF(ImportMembers::Nested, virtualDef) |
| 387 | USEMF(ImportMembers::Nested, virtualDecl) |
| 388 | USEMF(ImportMembers::Nested, virtualInclass) |
| 389 | USEMF(ImportMembers::Nested, virtualInlineDef) |
| 390 | USEMF(ImportMembers::Nested, virtualInlineDecl) |
| 391 | USEMF(ImportMembers::Nested, staticDef) |
| 392 | USEMF(ImportMembers::Nested, staticDecl) |
| 393 | USEMF(ImportMembers::Nested, staticInclass) |
| 394 | USEMF(ImportMembers::Nested, staticInlineDef) |
| 395 | USEMF(ImportMembers::Nested, staticInlineDecl) |
| 396 | USEMF(ImportMembers::Nested, protectedNormalDecl) |
| 397 | USEMF(ImportMembers::Nested, protectedStaticDecl) |
| 398 | USEMF(ImportMembers::Nested, privateNormalDecl) |
| 399 | USEMF(ImportMembers::Nested, privateStaticDecl) |
| 400 | USEMF(ImportMembers::Nested, ignored) |
| 401 | |
| 402 | USEMV(ImportMembers::Nested, StaticField) |
| 403 | USEMV(ImportMembers::Nested, StaticConstField) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 404 | USEMV(ImportMembers::Nested, StaticConstFieldEqualInit) |
| 405 | USEMV(ImportMembers::Nested, StaticConstFieldBraceInit) |
| 406 | USEMV(ImportMembers::Nested, ConstexprField) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 407 | |
| 408 | |
| 409 | // Import special member functions. |
| 410 | struct ImportSpecials { |
| 411 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"\01??0ImportSpecials@@QAE@XZ"(%struct.ImportSpecials* returned) |
| 412 | // M64-DAG: declare dllimport %struct.ImportSpecials* @"\01??0ImportSpecials@@QEAA@XZ"(%struct.ImportSpecials* returned) |
| 413 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1Ev(%struct.ImportSpecials*) |
| 414 | // G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1Ev(%struct.ImportSpecials*) |
| 415 | __declspec(dllimport) ImportSpecials(); |
| 416 | |
| 417 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??1ImportSpecials@@QAE@XZ"(%struct.ImportSpecials*) |
| 418 | // M64-DAG: declare dllimport void @"\01??1ImportSpecials@@QEAA@XZ"(%struct.ImportSpecials*) |
| 419 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsD1Ev(%struct.ImportSpecials*) |
| 420 | // G64-DAG: declare dllimport void @_ZN14ImportSpecialsD1Ev(%struct.ImportSpecials*) |
Stephen Hines | c568f1e | 2014-07-21 00:47:37 -0700 | [diff] [blame] | 421 | __declspec(dllimport) ~ImportSpecials(); |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 422 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 423 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"\01??0ImportSpecials@@QAE@ABU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 424 | // M64-DAG: declare dllimport %struct.ImportSpecials* @"\01??0ImportSpecials@@QEAA@AEBU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 425 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 426 | // G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 427 | __declspec(dllimport) ImportSpecials(const ImportSpecials&); |
| 428 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 429 | // M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @"\01??4ImportSpecials@@QAEAAU0@ABU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 430 | // M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @"\01??4ImportSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 431 | // G32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 432 | // G64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 433 | __declspec(dllimport) ImportSpecials& operator=(const ImportSpecials&); |
| 434 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 435 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"\01??0ImportSpecials@@QAE@$$QAU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 436 | // M64-DAG: declare dllimport %struct.ImportSpecials* @"\01??0ImportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 437 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 438 | // G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 439 | __declspec(dllimport) ImportSpecials(ImportSpecials&&); |
| 440 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 441 | // M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @"\01??4ImportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 442 | // M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @"\01??4ImportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 443 | // G32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @_ZN14ImportSpecialsaSEOS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
| 444 | // G64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @_ZN14ImportSpecialsaSEOS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 445 | __declspec(dllimport) ImportSpecials& operator=(ImportSpecials&&); |
| 446 | }; |
| 447 | USESPECIALS(ImportSpecials) |
| 448 | |
| 449 | |
| 450 | // Export inline special member functions. |
| 451 | struct ImportInlineSpecials { |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 452 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@XZ"(%struct.ImportInlineSpecials* returned) |
| 453 | // M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QEAA@XZ"(%struct.ImportInlineSpecials* returned) |
| 454 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev(%struct.ImportInlineSpecials* %this) |
| 455 | // G64-DAG: define linkonce_odr void @_ZN20ImportInlineSpecialsC1Ev(%struct.ImportInlineSpecials* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 456 | // MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@XZ"( |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 457 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev( |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 458 | __declspec(dllimport) ImportInlineSpecials() {} |
| 459 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 460 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??1ImportInlineSpecials@@QAE@XZ"(%struct.ImportInlineSpecials*) |
| 461 | // M64-DAG: declare dllimport void @"\01??1ImportInlineSpecials@@QEAA@XZ"(%struct.ImportInlineSpecials*) |
| 462 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev(%struct.ImportInlineSpecials* %this) |
| 463 | // G64-DAG: define linkonce_odr void @_ZN20ImportInlineSpecialsD1Ev(%struct.ImportInlineSpecials* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 464 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01??1ImportInlineSpecials@@QAE@XZ"( |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 465 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev( |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 466 | __declspec(dllimport) ~ImportInlineSpecials() {} |
| 467 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 468 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@ABU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 469 | // M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QEAA@AEBU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 470 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 471 | // G64-DAG: define linkonce_odr void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 472 | // MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@ABU0@@Z"( |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 473 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_( |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 474 | __declspec(dllimport) inline ImportInlineSpecials(const ImportInlineSpecials&); |
| 475 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 476 | // M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@ABU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 477 | // M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 478 | // G32-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 479 | // G64-DAG: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 480 | // MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@ABU0@@Z"( |
| 481 | // GO1-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_( |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 482 | __declspec(dllimport) ImportInlineSpecials& operator=(const ImportInlineSpecials&); |
| 483 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 484 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 485 | // M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 486 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 487 | // G64-DAG: define linkonce_odr void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 488 | // MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"( |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 489 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_( |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 490 | __declspec(dllimport) ImportInlineSpecials(ImportInlineSpecials&&) {} |
| 491 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 492 | // M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 493 | // M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 494 | // G32-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 495 | // G64-DAG: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}})) |
| 496 | // MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"( |
| 497 | // GO1-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_( |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 498 | __declspec(dllimport) ImportInlineSpecials& operator=(ImportInlineSpecials&&) { return *this; } |
| 499 | }; |
| 500 | ImportInlineSpecials::ImportInlineSpecials(const ImportInlineSpecials&) {} |
| 501 | inline ImportInlineSpecials& ImportInlineSpecials::operator=(const ImportInlineSpecials&) { return *this; } |
| 502 | USESPECIALS(ImportInlineSpecials) |
| 503 | |
| 504 | |
| 505 | // Import defaulted member functions. |
| 506 | struct ImportDefaulted { |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 507 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted* returned) |
| 508 | // M64-DAG: declare dllimport %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QEAA@XZ"(%struct.ImportDefaulted* returned) |
| 509 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this) |
| 510 | // G64-DAG: define linkonce_odr void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 511 | // MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted* returned %this) |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 512 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 513 | __declspec(dllimport) ImportDefaulted() = default; |
| 514 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 515 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??1ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted*) |
| 516 | // M64-DAG: declare dllimport void @"\01??1ImportDefaulted@@QEAA@XZ"(%struct.ImportDefaulted*) |
| 517 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this) |
| 518 | // G64-DAG: define linkonce_odr void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 519 | // MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01??1ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted* %this) |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 520 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 521 | __declspec(dllimport) ~ImportDefaulted() = default; |
| 522 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 523 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 524 | // M64-DAG: declare dllimport %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QEAA@AEBU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 525 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 526 | // G64-DAG: define linkonce_odr void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 527 | // MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* returned %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 528 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 529 | __declspec(dllimport) ImportDefaulted(const ImportDefaulted&) = default; |
| 530 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 531 | // M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 532 | // M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 533 | // G32-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 534 | // G64-DAG: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 535 | // MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 536 | // GO1-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 537 | __declspec(dllimport) ImportDefaulted& operator=(const ImportDefaulted&) = default; |
| 538 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 539 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 540 | // M64-DAG: declare dllimport %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 541 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 542 | // G64-DAG: define linkonce_odr void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 543 | // MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* returned %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 544 | // GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 545 | __declspec(dllimport) ImportDefaulted(ImportDefaulted&&) = default; |
| 546 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 547 | // M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 548 | // M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 549 | // G32-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 550 | // G64-DAG: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 551 | // MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
| 552 | // GO1-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 553 | __declspec(dllimport) ImportDefaulted& operator=(ImportDefaulted&&) = default; |
| 554 | |
| 555 | ForceNonTrivial v; // ensure special members are non-trivial |
| 556 | }; |
| 557 | USESPECIALS(ImportDefaulted) |
| 558 | |
| 559 | |
| 560 | // Import defaulted member function definitions. |
| 561 | struct ImportDefaultedDefs { |
| 562 | __declspec(dllimport) inline ImportDefaultedDefs(); |
| 563 | __declspec(dllimport) inline ~ImportDefaultedDefs(); |
| 564 | |
| 565 | __declspec(dllimport) ImportDefaultedDefs(const ImportDefaultedDefs&); |
| 566 | __declspec(dllimport) ImportDefaultedDefs& operator=(const ImportDefaultedDefs&); |
| 567 | |
| 568 | __declspec(dllimport) ImportDefaultedDefs(ImportDefaultedDefs&&); |
| 569 | __declspec(dllimport) ImportDefaultedDefs& operator=(ImportDefaultedDefs&&); |
| 570 | }; |
| 571 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 572 | #ifdef MSABI |
| 573 | // For MinGW, the function will not be dllimport, and we cannot add the attribute now. |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 574 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QAE@XZ"(%struct.ImportDefaultedDefs* returned) |
| 575 | // M64-DAG: declare dllimport %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QEAA@XZ"(%struct.ImportDefaultedDefs* returned) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 576 | __declspec(dllimport) ImportDefaultedDefs::ImportDefaultedDefs() = default; |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 577 | #endif |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 578 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 579 | #ifdef MSABI |
| 580 | // For MinGW, the function will not be dllimport, and we cannot add the attribute now. |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 581 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??1ImportDefaultedDefs@@QAE@XZ"(%struct.ImportDefaultedDefs*) |
| 582 | // M64-DAG: declare dllimport void @"\01??1ImportDefaultedDefs@@QEAA@XZ"(%struct.ImportDefaultedDefs*) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 583 | __declspec(dllimport) ImportDefaultedDefs::~ImportDefaultedDefs() = default; |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 584 | #endif |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 585 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 586 | // M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ImportDefaultedDefs* returned, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 587 | // M64-DAG: declare dllimport %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ImportDefaultedDefs* returned, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 588 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 589 | // G64-DAG: define linkonce_odr void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 590 | inline ImportDefaultedDefs::ImportDefaultedDefs(const ImportDefaultedDefs&) = default; |
| 591 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 592 | // M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 593 | // M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 594 | // G32-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 595 | // G64-DAG: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 596 | inline ImportDefaultedDefs& ImportDefaultedDefs::operator=(const ImportDefaultedDefs&) = default; |
| 597 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 598 | // M32-DAG: define x86_thiscallcc %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 599 | // M64-DAG: define %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 600 | // G32-DAG: define x86_thiscallcc void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 601 | // G64-DAG: define void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 602 | // G32-DAG: define x86_thiscallcc void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 603 | // G64-DAG: define void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 604 | ImportDefaultedDefs::ImportDefaultedDefs(ImportDefaultedDefs&&) = default; // dllimport ignored |
| 605 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 606 | // M32-DAG: define x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 607 | // M64-DAG: define dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 608 | // G32-DAG: define x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
| 609 | // G64-DAG: define dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}})) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 610 | ImportDefaultedDefs& ImportDefaultedDefs::operator=(ImportDefaultedDefs&&) = default; // dllimport ignored |
| 611 | |
| 612 | USESPECIALS(ImportDefaultedDefs) |
| 613 | |
| 614 | |
| 615 | // Import allocation functions. |
| 616 | struct ImportAlloc { |
| 617 | __declspec(dllimport) void* operator new(__SIZE_TYPE__); |
| 618 | __declspec(dllimport) void* operator new[](__SIZE_TYPE__); |
| 619 | __declspec(dllimport) void operator delete(void*); |
| 620 | __declspec(dllimport) void operator delete[](void*); |
| 621 | }; |
| 622 | |
| 623 | // M32-DAG: declare dllimport i8* @"\01??2ImportAlloc@@SAPAXI@Z"(i32) |
| 624 | // M64-DAG: declare dllimport i8* @"\01??2ImportAlloc@@SAPEAX_K@Z"(i64) |
| 625 | // G32-DAG: declare dllimport i8* @_ZN11ImportAllocnwEj(i32) |
| 626 | // G64-DAG: declare dllimport i8* @_ZN11ImportAllocnwEy(i64) |
| 627 | void UNIQ(use)() { new ImportAlloc(); } |
| 628 | |
| 629 | // M32-DAG: declare dllimport i8* @"\01??_UImportAlloc@@SAPAXI@Z"(i32) |
| 630 | // M64-DAG: declare dllimport i8* @"\01??_UImportAlloc@@SAPEAX_K@Z"(i64) |
| 631 | // G32-DAG: declare dllimport i8* @_ZN11ImportAllocnaEj(i32) |
| 632 | // G64-DAG: declare dllimport i8* @_ZN11ImportAllocnaEy(i64) |
| 633 | void UNIQ(use)() { new ImportAlloc[1]; } |
| 634 | |
| 635 | // M32-DAG: declare dllimport void @"\01??3ImportAlloc@@SAXPAX@Z"(i8*) |
| 636 | // M64-DAG: declare dllimport void @"\01??3ImportAlloc@@SAXPEAX@Z"(i8*) |
| 637 | // G32-DAG: declare dllimport void @_ZN11ImportAllocdlEPv(i8*) |
| 638 | // G64-DAG: declare dllimport void @_ZN11ImportAllocdlEPv(i8*) |
| 639 | void UNIQ(use)(ImportAlloc* ptr) { delete ptr; } |
| 640 | |
| 641 | // M32-DAG: declare dllimport void @"\01??_VImportAlloc@@SAXPAX@Z"(i8*) |
| 642 | // M64-DAG: declare dllimport void @"\01??_VImportAlloc@@SAXPEAX@Z"(i8*) |
| 643 | // G32-DAG: declare dllimport void @_ZN11ImportAllocdaEPv(i8*) |
| 644 | // G64-DAG: declare dllimport void @_ZN11ImportAllocdaEPv(i8*) |
| 645 | void UNIQ(use)(ImportAlloc* ptr) { delete[] ptr; } |
| 646 | |
| 647 | |
| 648 | //===----------------------------------------------------------------------===// |
| 649 | // Class member templates |
| 650 | //===----------------------------------------------------------------------===// |
| 651 | |
| 652 | struct MemFunTmpl { |
| 653 | template<typename T> void normalDef() {} |
| 654 | template<typename T> __declspec(dllimport) void importedNormal() {} |
| 655 | template<typename T> static void staticDef() {} |
| 656 | template<typename T> __declspec(dllimport) static void importedStatic() {} |
| 657 | }; |
| 658 | |
| 659 | // Import implicit instantiation of an imported member function template. |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 660 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??$importedNormal@UImplicitInst_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 661 | // M64-DAG: declare dllimport void @"\01??$importedNormal@UImplicitInst_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
| 662 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ImplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this) |
| 663 | // G64-DAG: define linkonce_odr void @_ZN10MemFunTmpl14importedNormalI21ImplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 664 | USEMF(MemFunTmpl, importedNormal<ImplicitInst_Imported>) |
| 665 | |
| 666 | // MSC-DAG: declare dllimport void @"\01??$importedStatic@UImplicitInst_Imported@@@MemFunTmpl@@SAXXZ"() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 667 | // GNU-DAG: define linkonce_odr void @_ZN10MemFunTmpl14importedStaticI21ImplicitInst_ImportedEEvv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 668 | USE(MemFunTmpl::importedStatic<ImplicitInst_Imported>) |
| 669 | |
| 670 | |
| 671 | // Import explicit instantiation declaration of an imported member function |
| 672 | // template. |
| 673 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??$importedNormal@UExplicitDecl_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 674 | // M64-DAG: declare dllimport void @"\01??$importedNormal@UExplicitDecl_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 675 | // G32-DAG: declare x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*) |
| 676 | // G64-DAG: declare void @_ZN10MemFunTmpl14importedNormalI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 677 | extern template void MemFunTmpl::importedNormal<ExplicitDecl_Imported>(); |
| 678 | USEMF(MemFunTmpl, importedNormal<ExplicitDecl_Imported>) |
| 679 | |
| 680 | // MSC-DAG: declare dllimport void @"\01??$importedStatic@UExplicitDecl_Imported@@@MemFunTmpl@@SAXXZ"() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 681 | // GNU-DAG: declare void @_ZN10MemFunTmpl14importedStaticI21ExplicitDecl_ImportedEEvv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 682 | extern template void MemFunTmpl::importedStatic<ExplicitDecl_Imported>(); |
| 683 | USE(MemFunTmpl::importedStatic<ExplicitDecl_Imported>) |
| 684 | |
| 685 | |
| 686 | // Import explicit instantiation definition of an imported member function |
| 687 | // template. |
| 688 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??$importedNormal@UExplicitInst_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 689 | // M64-DAG: declare dllimport void @"\01??$importedNormal@UExplicitInst_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 690 | // G32-DAG: define weak_odr x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this) |
| 691 | // G64-DAG: define weak_odr void @_ZN10MemFunTmpl14importedNormalI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 692 | template void MemFunTmpl::importedNormal<ExplicitInst_Imported>(); |
| 693 | USEMF(MemFunTmpl, importedNormal<ExplicitInst_Imported>) |
| 694 | |
| 695 | // MSC-DAG: declare dllimport void @"\01??$importedStatic@UExplicitInst_Imported@@@MemFunTmpl@@SAXXZ"() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 696 | // GNU-DAG: define weak_odr void @_ZN10MemFunTmpl14importedStaticI21ExplicitInst_ImportedEEvv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 697 | template void MemFunTmpl::importedStatic<ExplicitInst_Imported>(); |
| 698 | USE(MemFunTmpl::importedStatic<ExplicitInst_Imported>) |
| 699 | |
| 700 | |
| 701 | // Import specialization of an imported member function template. |
| 702 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??$importedNormal@UExplicitSpec_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 703 | // M64-DAG: declare dllimport void @"\01??$importedNormal@UExplicitSpec_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
| 704 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ExplicitSpec_ImportedEEvv(%struct.MemFunTmpl*) |
| 705 | // G64-DAG: declare dllimport void @_ZN10MemFunTmpl14importedNormalI21ExplicitSpec_ImportedEEvv(%struct.MemFunTmpl*) |
| 706 | template<> __declspec(dllimport) void MemFunTmpl::importedNormal<ExplicitSpec_Imported>(); |
| 707 | USEMF(MemFunTmpl, importedNormal<ExplicitSpec_Imported>) |
| 708 | |
| 709 | // M32-DAG-FIXME: declare dllimport x86_thiscallcc void @"\01??$importedNormal@UExplicitSpec_Def_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 710 | // M64-DAG-FIXME: declare dllimport void @"\01??$importedNormal@UExplicitSpec_Def_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
| 711 | #ifdef MSABI |
| 712 | //template<> __declspec(dllimport) void MemFunTmpl::importedNormal<ExplicitSpec_Def_Imported>() {} |
| 713 | //USEMF(MemFunTmpl, importedNormal<ExplicitSpec_Def_Imported>) |
| 714 | #endif |
| 715 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 716 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??$importedNormal@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 717 | // M64-DAG: declare dllimport void @"\01??$importedNormal@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
| 718 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this) |
| 719 | // G64-DAG: define linkonce_odr void @_ZN10MemFunTmpl14importedNormalI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 720 | template<> __declspec(dllimport) inline void MemFunTmpl::importedNormal<ExplicitSpec_InlineDef_Imported>() {} |
| 721 | USEMF(MemFunTmpl, importedNormal<ExplicitSpec_InlineDef_Imported>) |
| 722 | |
| 723 | |
| 724 | // MSC-DAG: declare dllimport void @"\01??$importedStatic@UExplicitSpec_Imported@@@MemFunTmpl@@SAXXZ"() |
| 725 | // GNU-DAG: declare dllimport void @_ZN10MemFunTmpl14importedStaticI21ExplicitSpec_ImportedEEvv() |
| 726 | template<> __declspec(dllimport) void MemFunTmpl::importedStatic<ExplicitSpec_Imported>(); |
| 727 | USE(MemFunTmpl::importedStatic<ExplicitSpec_Imported>) |
| 728 | |
| 729 | // MSC-DAG-FIXME: declare dllimport void @"\01??$importedStatic@UExplicitSpec_Def_Imported@@@MemFunTmpl@@SAXXZ"() |
| 730 | #ifdef MSABI |
| 731 | //template<> __declspec(dllimport) void MemFunTmpl::importedStatic<ExplicitSpec_Def_Imported>() {} |
| 732 | //USE(MemFunTmpl::importedStatic<ExplicitSpec_Def_Imported>) |
| 733 | #endif |
| 734 | |
| 735 | // MSC-DAG: declare dllimport void @"\01??$importedStatic@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@SAXXZ"() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 736 | // GNU-DAG: define linkonce_odr void @_ZN10MemFunTmpl14importedStaticI31ExplicitSpec_InlineDef_ImportedEEvv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 737 | template<> __declspec(dllimport) inline void MemFunTmpl::importedStatic<ExplicitSpec_InlineDef_Imported>() {} |
| 738 | USE(MemFunTmpl::importedStatic<ExplicitSpec_InlineDef_Imported>) |
| 739 | |
| 740 | |
| 741 | // Not importing specialization of an imported member function template without |
| 742 | // explicit dllimport. |
| 743 | // M32-DAG: define x86_thiscallcc void @"\01??$importedNormal@UExplicitSpec_NotImported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this) |
| 744 | // M64-DAG: define void @"\01??$importedNormal@UExplicitSpec_NotImported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this) |
| 745 | // G32-DAG: define x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI24ExplicitSpec_NotImportedEEvv(%struct.MemFunTmpl* %this) |
| 746 | // G64-DAG: define void @_ZN10MemFunTmpl14importedNormalI24ExplicitSpec_NotImportedEEvv(%struct.MemFunTmpl* %this) |
| 747 | template<> void MemFunTmpl::importedNormal<ExplicitSpec_NotImported>() {} |
| 748 | USEMF(MemFunTmpl, importedNormal<ExplicitSpec_NotImported>) |
| 749 | |
| 750 | // MSC-DAG: define void @"\01??$importedStatic@UExplicitSpec_NotImported@@@MemFunTmpl@@SAXXZ"() |
| 751 | // GNU-DAG: define void @_ZN10MemFunTmpl14importedStaticI24ExplicitSpec_NotImportedEEvv() |
| 752 | template<> void MemFunTmpl::importedStatic<ExplicitSpec_NotImported>() {} |
| 753 | USE(MemFunTmpl::importedStatic<ExplicitSpec_NotImported>) |
| 754 | |
| 755 | |
| 756 | // Import explicit instantiation declaration of a non-imported member function |
| 757 | // template. |
| 758 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??$normalDef@UExplicitDecl_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 759 | // M64-DAG: declare dllimport void @"\01??$normalDef@UExplicitDecl_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 760 | // G32-DAG: declare x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*) |
| 761 | // G64-DAG: declare void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 762 | extern template __declspec(dllimport) void MemFunTmpl::normalDef<ExplicitDecl_Imported>(); |
| 763 | USEMF(MemFunTmpl, normalDef<ExplicitDecl_Imported>) |
| 764 | |
| 765 | // MSC-DAG: declare dllimport void @"\01??$staticDef@UExplicitDecl_Imported@@@MemFunTmpl@@SAXXZ"() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 766 | // GNU-DAG: declare void @_ZN10MemFunTmpl9staticDefI21ExplicitDecl_ImportedEEvv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 767 | extern template __declspec(dllimport) void MemFunTmpl::staticDef<ExplicitDecl_Imported>(); |
| 768 | USE(MemFunTmpl::staticDef<ExplicitDecl_Imported>) |
| 769 | |
| 770 | |
| 771 | // Import explicit instantiation definition of a non-imported member function |
| 772 | // template. |
| 773 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??$normalDef@UExplicitInst_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 774 | // M64-DAG: declare dllimport void @"\01??$normalDef@UExplicitInst_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 775 | // G32-DAG: define weak_odr x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this) |
| 776 | // G64-DAG: define weak_odr void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 777 | template __declspec(dllimport) void MemFunTmpl::normalDef<ExplicitInst_Imported>(); |
| 778 | USEMF(MemFunTmpl, normalDef<ExplicitInst_Imported>) |
| 779 | |
| 780 | // MSC-DAG: declare dllimport void @"\01??$staticDef@UExplicitInst_Imported@@@MemFunTmpl@@SAXXZ"() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 781 | // GNU-DAG: define weak_odr void @_ZN10MemFunTmpl9staticDefI21ExplicitInst_ImportedEEvv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 782 | template __declspec(dllimport) void MemFunTmpl::staticDef<ExplicitInst_Imported>(); |
| 783 | USE(MemFunTmpl::staticDef<ExplicitInst_Imported>) |
| 784 | |
| 785 | |
| 786 | // Import specialization of a non-imported member function template. |
| 787 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??$normalDef@UExplicitSpec_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 788 | // M64-DAG: declare dllimport void @"\01??$normalDef@UExplicitSpec_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
| 789 | // G32-DAG: declare dllimport x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitSpec_ImportedEEvv(%struct.MemFunTmpl*) |
| 790 | // G64-DAG: declare dllimport void @_ZN10MemFunTmpl9normalDefI21ExplicitSpec_ImportedEEvv(%struct.MemFunTmpl*) |
| 791 | template<> __declspec(dllimport) void MemFunTmpl::normalDef<ExplicitSpec_Imported>(); |
| 792 | USEMF(MemFunTmpl, normalDef<ExplicitSpec_Imported>) |
| 793 | |
| 794 | // M32-DAG-FIXME: declare dllimport x86_thiscallcc void @"\01??$normalDef@UExplicitSpec_Def_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 795 | // M64-DAG-FIXME: declare dllimport void @"\01??$normalDef@UExplicitSpec_Def_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
| 796 | #ifdef MSABI |
| 797 | //template<> __declspec(dllimport) void MemFunTmpl::normalDef<ExplicitSpec_Def_Imported>() {} |
| 798 | //USEMF(MemFunTmpl, normalDef<ExplicitSpec_Def_Imported>) |
| 799 | #endif |
| 800 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 801 | // M32-DAG: declare dllimport x86_thiscallcc void @"\01??$normalDef@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*) |
| 802 | // M64-DAG: declare dllimport void @"\01??$normalDef@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*) |
| 803 | // G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this) |
| 804 | // G64-DAG: define linkonce_odr void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this) |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 805 | template<> __declspec(dllimport) inline void MemFunTmpl::normalDef<ExplicitSpec_InlineDef_Imported>() {} |
| 806 | USEMF(MemFunTmpl, normalDef<ExplicitSpec_InlineDef_Imported>) |
| 807 | |
| 808 | |
| 809 | // MSC-DAG: declare dllimport void @"\01??$staticDef@UExplicitSpec_Imported@@@MemFunTmpl@@SAXXZ"() |
| 810 | // GNU-DAG: declare dllimport void @_ZN10MemFunTmpl9staticDefI21ExplicitSpec_ImportedEEvv() |
| 811 | template<> __declspec(dllimport) void MemFunTmpl::staticDef<ExplicitSpec_Imported>(); |
| 812 | USE(MemFunTmpl::staticDef<ExplicitSpec_Imported>) |
| 813 | |
| 814 | // MSC-DAG-FIXME: declare dllimport void @"\01??$staticDef@UExplicitSpec_Def_Imported@@@MemFunTmpl@@SAXXZ"() |
| 815 | #ifdef MSABI |
| 816 | //template<> __declspec(dllimport) void MemFunTmpl::staticDef<ExplicitSpec_Def_Imported>() {} |
| 817 | //USE(MemFunTmpl::staticDef<ExplicitSpec_Def_Imported>) |
| 818 | #endif |
| 819 | |
| 820 | // MSC-DAG: declare dllimport void @"\01??$staticDef@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@SAXXZ"() |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 821 | // GNU-DAG: define linkonce_odr void @_ZN10MemFunTmpl9staticDefI31ExplicitSpec_InlineDef_ImportedEEvv() |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 822 | template<> __declspec(dllimport) inline void MemFunTmpl::staticDef<ExplicitSpec_InlineDef_Imported>() {} |
| 823 | USE(MemFunTmpl::staticDef<ExplicitSpec_InlineDef_Imported>) |
| 824 | |
| 825 | |
| 826 | |
| 827 | struct MemVarTmpl { |
| 828 | template<typename T> static const int StaticVar = 1; |
| 829 | template<typename T> __declspec(dllimport) static const int ImportedStaticVar = 1; |
| 830 | }; |
| 831 | |
| 832 | // Import implicit instantiation of an imported member variable template. |
| 833 | // MSC-DAG: @"\01??$ImportedStaticVar@UImplicitInst_Imported@@@MemVarTmpl@@2HB" = available_externally dllimport constant i32 1, align 4 |
| 834 | // GNU-DAG: @_ZN10MemVarTmpl17ImportedStaticVarI21ImplicitInst_ImportedEE = external dllimport constant i32 |
| 835 | USEMV(MemVarTmpl, ImportedStaticVar<ImplicitInst_Imported>) |
| 836 | |
| 837 | // Import explicit instantiation declaration of an imported member variable |
| 838 | // template. |
| 839 | // MSC-DAG: @"\01??$ImportedStaticVar@UExplicitDecl_Imported@@@MemVarTmpl@@2HB" = external dllimport constant i32 |
| 840 | // GNU-DAG: @_ZN10MemVarTmpl17ImportedStaticVarI21ExplicitDecl_ImportedEE = external dllimport constant i32 |
| 841 | extern template const int MemVarTmpl::ImportedStaticVar<ExplicitDecl_Imported>; |
| 842 | USEMV(MemVarTmpl, ImportedStaticVar<ExplicitDecl_Imported>) |
| 843 | |
| 844 | // An explicit instantiation definition of an imported member variable template |
| 845 | // cannot be imported because the template must be defined which is illegal. The |
| 846 | // in-class initializer does not count. |
| 847 | |
| 848 | // Import specialization of an imported member variable template. |
| 849 | // MSC-DAG: @"\01??$ImportedStaticVar@UExplicitSpec_Imported@@@MemVarTmpl@@2HB" = external dllimport constant i32 |
| 850 | // GNU-DAG: @_ZN10MemVarTmpl17ImportedStaticVarI21ExplicitSpec_ImportedEE = external dllimport constant i32 |
| 851 | template<> __declspec(dllimport) const int MemVarTmpl::ImportedStaticVar<ExplicitSpec_Imported>; |
| 852 | USEMV(MemVarTmpl, ImportedStaticVar<ExplicitSpec_Imported>) |
| 853 | |
| 854 | // Not importing specialization of a member variable template without explicit |
| 855 | // dllimport. |
| 856 | // MSC-DAG: @"\01??$ImportedStaticVar@UExplicitSpec_NotImported@@@MemVarTmpl@@2HB" = external constant i32 |
| 857 | // GNU-DAG: @_ZN10MemVarTmpl17ImportedStaticVarI24ExplicitSpec_NotImportedEE = external constant i32 |
| 858 | template<> const int MemVarTmpl::ImportedStaticVar<ExplicitSpec_NotImported>; |
| 859 | USEMV(MemVarTmpl, ImportedStaticVar<ExplicitSpec_NotImported>) |
| 860 | |
| 861 | |
| 862 | // Import explicit instantiation declaration of a non-imported member variable |
| 863 | // template. |
| 864 | // MSC-DAG: @"\01??$StaticVar@UExplicitDecl_Imported@@@MemVarTmpl@@2HB" = external dllimport constant i32 |
| 865 | // GNU-DAG: @_ZN10MemVarTmpl9StaticVarI21ExplicitDecl_ImportedEE = external dllimport constant i32 |
| 866 | extern template __declspec(dllimport) const int MemVarTmpl::StaticVar<ExplicitDecl_Imported>; |
| 867 | USEMV(MemVarTmpl, StaticVar<ExplicitDecl_Imported>) |
| 868 | |
| 869 | // An explicit instantiation definition of a non-imported member variable template |
| 870 | // cannot be imported because the template must be defined which is illegal. The |
| 871 | // in-class initializer does not count. |
| 872 | |
| 873 | // Import specialization of a non-imported member variable template. |
| 874 | // MSC-DAG: @"\01??$StaticVar@UExplicitSpec_Imported@@@MemVarTmpl@@2HB" = external dllimport constant i32 |
| 875 | // GNU-DAG: @_ZN10MemVarTmpl9StaticVarI21ExplicitSpec_ImportedEE = external dllimport constant i32 |
| 876 | template<> __declspec(dllimport) const int MemVarTmpl::StaticVar<ExplicitSpec_Imported>; |
| 877 | USEMV(MemVarTmpl, StaticVar<ExplicitSpec_Imported>) |