xref: /llvm-project/clang/test/CodeGenCXX/msabi-swiftcall-cc.cpp (revision df8dd61f2309124689b07844e47abddf46203d4e)
158340526SSaleem Abdulrasool // RUN: %clang_cc1 -triple i686-unknown-windows-msvc -fdeclspec -emit-llvm %s -o - | FileCheck %s
213aeee0dSSaleem Abdulrasool // RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -fdeclspec -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-64
358340526SSaleem Abdulrasool 
f()458340526SSaleem Abdulrasool void __attribute__((__swiftcall__)) f() {}
5fb93154bSReid Kleckner // CHECK-DAG: @"?f@@YSXXZ"
613aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?f@@YSXXZ"
758340526SSaleem Abdulrasool 
858340526SSaleem Abdulrasool void (__attribute__((__swiftcall__)) *p)();
9fb93154bSReid Kleckner // CHECK-DAG: @"?p@@3P6SXXZA"
1013aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?p@@3P6SXXZEA
1158340526SSaleem Abdulrasool 
1258340526SSaleem Abdulrasool namespace {
f()1358340526SSaleem Abdulrasool void __attribute__((__swiftcall__)) __attribute__((__used__)) f() { }
1458340526SSaleem Abdulrasool }
15*df8dd61fSReid Kleckner // CHECK-DAG: @"?f@?A0x{{[^@]*}}@@YSXXZ"
16*df8dd61fSReid Kleckner // CHECK-64-DAG: @"?f@?A0x{{[^@]*}}@@YSXXZ"
1758340526SSaleem Abdulrasool 
1858340526SSaleem Abdulrasool namespace n {
f()1958340526SSaleem Abdulrasool void __attribute__((__swiftcall__)) f() {}
2058340526SSaleem Abdulrasool }
2113aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?f@n@@YSXXZ"
2213aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?f@n@@YSXXZ"
2358340526SSaleem Abdulrasool 
2458340526SSaleem Abdulrasool struct __declspec(dllexport) S {
2558340526SSaleem Abdulrasool   S(const S &) = delete;
2658340526SSaleem Abdulrasool   S & operator=(const S &) = delete;
mS2758340526SSaleem Abdulrasool   void __attribute__((__swiftcall__)) m() { }
2858340526SSaleem Abdulrasool };
2913aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?m@S@@QASXXZ"
3013aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?m@S@@QEASXXZ"
3158340526SSaleem Abdulrasool 
f(void (()))3258340526SSaleem Abdulrasool void f(void (__attribute__((__swiftcall__))())) {}
3313aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?f@@YAXP6SXXZ@Z"
3413aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?f@@YAXP6SXXZ@Z"
3513aeee0dSSaleem Abdulrasool 
g()3613aeee0dSSaleem Abdulrasool void __attribute__((__preserve_most__)) g() {}
3713aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?g@@YUXXZ"
3813aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?g@@YUXXZ"
3913aeee0dSSaleem Abdulrasool 
4013aeee0dSSaleem Abdulrasool void (__attribute__((__preserve_most__)) *q)();
4113aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?q@@3P6UXXZA"
4213aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?q@@3P6UXXZEA"
4313aeee0dSSaleem Abdulrasool 
4413aeee0dSSaleem Abdulrasool namespace {
g()4513aeee0dSSaleem Abdulrasool void __attribute__((__preserve_most__)) __attribute__((__used__)) g() {}
4613aeee0dSSaleem Abdulrasool }
47*df8dd61fSReid Kleckner // CHECK-DAG: @"?g@?A0x{{[^@]*}}@@YUXXZ"
48*df8dd61fSReid Kleckner // CHECK-64-DAG: @"?g@?A0x{{[^@]*}}@@YUXXZ"
4913aeee0dSSaleem Abdulrasool 
5013aeee0dSSaleem Abdulrasool namespace n {
g()5113aeee0dSSaleem Abdulrasool void __attribute__((__preserve_most__)) g() {}
5213aeee0dSSaleem Abdulrasool }
5313aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?g@n@@YUXXZ"
5413aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?g@n@@YUXXZ"
5513aeee0dSSaleem Abdulrasool 
5613aeee0dSSaleem Abdulrasool struct __declspec(dllexport) T {
5713aeee0dSSaleem Abdulrasool   T(const T &) = delete;
5813aeee0dSSaleem Abdulrasool   T & operator=(const T &) = delete;
mT5913aeee0dSSaleem Abdulrasool   void __attribute__((__preserve_most__)) m() {}
6013aeee0dSSaleem Abdulrasool };
6113aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?m@T@@QAUXXZ"
6213aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?m@T@@QEAUXXZ"
6313aeee0dSSaleem Abdulrasool 
g(void (()))6413aeee0dSSaleem Abdulrasool void g(void (__attribute__((__preserve_most__))())) {}
6513aeee0dSSaleem Abdulrasool // CHECK-DAG: @"?g@@YAXP6UXXZ@Z"
6613aeee0dSSaleem Abdulrasool // CHECK-64-DAG: @"?g@@YAXP6UXXZ@Z"
6758340526SSaleem Abdulrasool 
68