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