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 Livoid __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 Livoid __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 Livoid __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 Livoid __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 Liint 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 Livoid __stdcall f7(foo) int foo; {} f8(void)57*67e74705SXin Livoid 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 Livoid __fastcall f9(int x, int y) {}; 64*67e74705SXin Li // WIN: define x86_fastcallcc void @f9({{.*}}) f10(int x,...)65*67e74705SXin Livoid __fastcall f10(int x, ...) {}; 66*67e74705SXin Li // WIN: define void @f10({{.*}}) f11(int x,...)67*67e74705SXin Livoid __stdcall f11(int x, ...) {}; 68*67e74705SXin Li // WIN: define void @f11({{.*}}) 69