diff options
| author | Andrey Bokhanko <andreybokhanko@gmail.com> | 2015-09-14 21:29:57 +0000 |
|---|---|---|
| committer | Andrey Bokhanko <andreybokhanko@gmail.com> | 2015-09-14 21:29:57 +0000 |
| commit | ddc04ef4933dbb176fde074613508d5311d3c338 (patch) | |
| tree | 1866941fa59589cf20edab4bb4851d18119c4742 /clang/test | |
| parent | 022bdc7d7361f48a359194e630e8b16f1d134cfe (diff) | |
| download | bcm5719-llvm-ddc04ef4933dbb176fde074613508d5311d3c338.tar.gz bcm5719-llvm-ddc04ef4933dbb176fde074613508d5311d3c338.zip | |
PR24595: Ignore calling convention modifiers for structors in MS ABI.
MS compiler ignores calling convention modifiers for structors. This patch makes
clang do the same (for MS ABI). This fixes PR24595 and makes vswriter.h header
(from Windows SDK 8.1) compilable.
Differential Revision: http://reviews.llvm.org/D12402
llvm-svn: 247619
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGenCXX/microsoft-abi-structors.cpp | 20 | ||||
| -rw-r--r-- | clang/test/SemaCXX/decl-microsoft-call-conv.cpp | 7 |
2 files changed, 23 insertions, 4 deletions
diff --git a/clang/test/CodeGenCXX/microsoft-abi-structors.cpp b/clang/test/CodeGenCXX/microsoft-abi-structors.cpp index 0e44efa8d0a..3fb97b9a363 100644 --- a/clang/test/CodeGenCXX/microsoft-abi-structors.cpp +++ b/clang/test/CodeGenCXX/microsoft-abi-structors.cpp @@ -5,6 +5,7 @@ // RUN: FileCheck --check-prefix DTORS %s < %t // RUN: FileCheck --check-prefix DTORS2 %s < %t // RUN: FileCheck --check-prefix DTORS3 %s < %t +// RUN: FileCheck --check-prefix DTORS4 %s < %t // // RUN: %clang_cc1 -emit-llvm %s -o - -mconstructor-aliases -triple=x86_64-pc-win32 -fno-rtti | FileCheck --check-prefix DTORS-X64 %s @@ -407,9 +408,7 @@ B::B(short *a) {} // CHECK: (%"struct.test1::B"* returned %this, i32* %a, i32 %is_most_derived) // CHECK: define %"struct.test1::B"* @"\01??0B@test1@@QAA@PBDZZ" // CHECK: (%"struct.test1::B"* returned %this, i32 %is_most_derived, i8* %a, ...) - -// FIXME: This should be x86_thiscallcc. MSVC ignores explicit CCs on structors. -// CHECK: define %"struct.test1::B"* @"\01??0B@test1@@QAA@PAF@Z" +// CHECK: define x86_thiscallcc %"struct.test1::B"* @"\01??0B@test1@@QAE@PAF@Z" // CHECK: (%"struct.test1::B"* returned %this, i16* %a, i32 %is_most_derived) void construct_b() { @@ -458,3 +457,18 @@ void *getA() { // CHECK: (%"struct.(anonymous namespace)::A"* %this, i32 %should_call_delete) // CHECK: define internal x86_thiscallcc void @"\01??1A@?A@@UAE@XZ" // CHECK: (%"struct.(anonymous namespace)::A"* %this) + +// Check that we correctly transform __stdcall to __thiscall for ctors and +// dtors. +class G { + public: + __stdcall G() {}; +// DTORS4: define linkonce_odr x86_thiscallcc %class.G* @"\01??0G@@QAE@XZ" + __stdcall ~G() {}; +// DTORS4: define linkonce_odr x86_thiscallcc void @"\01??1G@@QAE@XZ" +}; + +extern void testG() { + G g; +} + diff --git a/clang/test/SemaCXX/decl-microsoft-call-conv.cpp b/clang/test/SemaCXX/decl-microsoft-call-conv.cpp index 6c392ea9420..acd9b0720b6 100644 --- a/clang/test/SemaCXX/decl-microsoft-call-conv.cpp +++ b/clang/test/SemaCXX/decl-microsoft-call-conv.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -std=c++14 -triple i686-pc-win32 -fms-extensions -verify %s +// RUN: %clang_cc1 -std=c++14 -triple i686-pc-win32 -fms-extensions -DMSABI -verify %s // RUN: %clang_cc1 -std=c++14 -triple i686-pc-mingw32 -verify %s // RUN: %clang_cc1 -std=c++14 -triple i686-pc-mingw32 -fms-extensions -verify %s @@ -74,6 +74,11 @@ struct S { static void static_member_variadic_default(int x, ...); static void __cdecl static_member_variadic_cdecl(int x, ...); + + // Structors can't be other than default in MS ABI environment +#ifdef MSABI + __vectorcall S(); // expected-warning {{vectorcall calling convention ignored on constructor/destructor}} +#endif }; void __cdecl S::member_default1() {} // expected-error {{function declared 'cdecl' here was previously declared without calling convention}} |

