xref: /aosp_15_r20/external/clang/test/CodeGen/microsoft-call-conv.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple i386-pc-linux -emit-llvm < %s | FileCheck %s
2*67e74705SXin Li // RUN: %clang_cc1 -triple i386-pc-linux -emit-llvm -mrtd < %s | FileCheck %s
3*67e74705SXin Li // RUN: %clang_cc1 -triple i386-pc-linux -emit-llvm -fms-compatibility < %s
4*67e74705SXin Li 
5*67e74705SXin Li void __fastcall f1(void);
6*67e74705SXin Li void __stdcall f2(void);
7*67e74705SXin Li void __thiscall f3(void);
f4(void)8*67e74705SXin Li void __fastcall f4(void) {
9*67e74705SXin Li // CHECK-LABEL: define x86_fastcallcc void @f4()
10*67e74705SXin Li   f1();
11*67e74705SXin Li // CHECK: call x86_fastcallcc void @f1()
12*67e74705SXin Li }
f5(void)13*67e74705SXin Li void __stdcall f5(void) {
14*67e74705SXin Li // CHECK-LABEL: define x86_stdcallcc void @f5()
15*67e74705SXin Li   f2();
16*67e74705SXin Li // CHECK: call x86_stdcallcc void @f2()
17*67e74705SXin Li }
f6(void)18*67e74705SXin Li void __thiscall f6(void) {
19*67e74705SXin Li // CHECK-LABEL: define x86_thiscallcc void @f6()
20*67e74705SXin Li   f3();
21*67e74705SXin Li // CHECK: call x86_thiscallcc void @f3()
22*67e74705SXin Li }
f61(void)23*67e74705SXin Li void __vectorcall f61(void) {
24*67e74705SXin Li // CHECK-LABEL: define x86_vectorcallcc void @f61()
25*67e74705SXin Li   f3();
26*67e74705SXin Li // CHECK: call x86_thiscallcc void @f3()
27*67e74705SXin Li }
28*67e74705SXin Li 
29*67e74705SXin Li // PR5280
30*67e74705SXin Li void (__fastcall *pf1)(void) = f1;
31*67e74705SXin Li void (__stdcall *pf2)(void) = f2;
32*67e74705SXin Li void (__thiscall *pf3)(void) = f3;
33*67e74705SXin Li void (__fastcall *pf4)(void) = f4;
34*67e74705SXin Li void (__stdcall *pf5)(void) = f5;
35*67e74705SXin Li void (__thiscall *pf6)(void) = f6;
36*67e74705SXin Li void (__vectorcall *pf7)(void) = f61;
37*67e74705SXin Li 
main(void)38*67e74705SXin Li int main(void) {
39*67e74705SXin Li     f4(); f5(); f6(); f61();
40*67e74705SXin Li     // CHECK: call x86_fastcallcc void @f4()
41*67e74705SXin Li     // CHECK: call x86_stdcallcc void @f5()
42*67e74705SXin Li     // CHECK: call x86_thiscallcc void @f6()
43*67e74705SXin Li     // CHECK: call x86_vectorcallcc void @f61()
44*67e74705SXin Li     pf1(); pf2(); pf3(); pf4(); pf5(); pf6(); pf7();
45*67e74705SXin Li     // CHECK: call x86_fastcallcc void %{{.*}}()
46*67e74705SXin Li     // CHECK: call x86_stdcallcc void %{{.*}}()
47*67e74705SXin Li     // CHECK: call x86_thiscallcc void %{{.*}}()
48*67e74705SXin Li     // CHECK: call x86_fastcallcc void %{{.*}}()
49*67e74705SXin Li     // CHECK: call x86_stdcallcc void %{{.*}}()
50*67e74705SXin Li     // CHECK: call x86_thiscallcc void %{{.*}}()
51*67e74705SXin Li     // CHECK: call x86_vectorcallcc void %{{.*}}()
52*67e74705SXin Li     return 0;
53*67e74705SXin Li }
54*67e74705SXin Li 
55*67e74705SXin Li // PR7117
f7(foo)56*67e74705SXin Li void __stdcall f7(foo) int foo; {}
f8(void)57*67e74705SXin Li void f8(void) {
58*67e74705SXin Li   f7(0);
59*67e74705SXin Li   // CHECK: call x86_stdcallcc void @f7(i32 0)
60*67e74705SXin Li }
61*67e74705SXin Li 
62*67e74705SXin Li // PR12535
f9(int x,int y)63*67e74705SXin Li void __fastcall f9(int x, int y) {};
64*67e74705SXin Li // WIN: define x86_fastcallcc void @f9({{.*}})
f10(int x,...)65*67e74705SXin Li void __fastcall f10(int x, ...) {};
66*67e74705SXin Li // WIN: define void @f10({{.*}})
f11(int x,...)67*67e74705SXin Li void __stdcall f11(int x, ...) {};
68*67e74705SXin Li // WIN: define void @f11({{.*}})
69