182bfa19fe3be324b13fdbcda46304b52c500f0d4Aaron Ballman// RUN: %clang_cc1 -triple i386-pc-linux -emit-llvm < %s | FileCheck %s 245d3950e373412f395413c81a0310e8090508608Hans Wennborg// RUN: %clang_cc1 -triple i386-pc-linux -emit-llvm -mrtd < %s | FileCheck %s 345d3950e373412f395413c81a0310e8090508608Hans Wennborg// RUN: %clang_cc1 -triple i386-pc-linux -emit-llvm -fms-compatibility < %s 4d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor 5d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid __fastcall f1(void); 6d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid __stdcall f2(void); 7d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid __thiscall f3(void); 8d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid __fastcall f4(void) { 993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define x86_fastcallcc void @f4() 10d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor f1(); 11d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor// CHECK: call x86_fastcallcc void @f1() 12d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor} 13d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid __stdcall f5(void) { 1493ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define x86_stdcallcc void @f5() 15d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor f2(); 16d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor// CHECK: call x86_stdcallcc void @f2() 17d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor} 18d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid __thiscall f6(void) { 1993ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin// CHECK-LABEL: define x86_thiscallcc void @f6() 20d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor f3(); 21d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor// CHECK: call x86_thiscallcc void @f3() 22d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor} 23d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor 24d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor// PR5280 25d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid (__fastcall *pf1)(void) = f1; 26d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid (__stdcall *pf2)(void) = f2; 27d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid (__thiscall *pf3)(void) = f3; 28d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid (__fastcall *pf4)(void) = f4; 29d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid (__stdcall *pf5)(void) = f5; 30d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid (__thiscall *pf6)(void) = f6; 31d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor 32d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorint main(void) { 33d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor f4(); f5(); f6(); 34d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor // CHECK: call x86_fastcallcc void @f4() 35d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor // CHECK: call x86_stdcallcc void @f5() 36d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor // CHECK: call x86_thiscallcc void @f6() 37d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor pf1(); pf2(); pf3(); pf4(); pf5(); pf6(); 38d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor // CHECK: call x86_fastcallcc void %{{.*}}() 39d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor // CHECK: call x86_stdcallcc void %{{.*}}() 40d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor // CHECK: call x86_thiscallcc void %{{.*}}() 41d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor // CHECK: call x86_fastcallcc void %{{.*}}() 42d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor // CHECK: call x86_stdcallcc void %{{.*}}() 43d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor // CHECK: call x86_thiscallcc void %{{.*}}() 44d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor return 0; 45d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor} 46d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor 47d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor// PR7117 48d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid __stdcall f7(foo) int foo; {} 49d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregorvoid f8(void) { 50d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor f7(0); 5101f151e0ffba72bcad770bea5f563a9b68ca050eJohn McCall // CHECK: call x86_stdcallcc void @f7(i32 0) 52d1808f380aed0fa19573909ada3e26233c80f87cDouglas Gregor} 533636fb126ffa22704c5eacb52fc5673247d8ad57Hans Wennborg 543636fb126ffa22704c5eacb52fc5673247d8ad57Hans Wennborg// PR12535 553636fb126ffa22704c5eacb52fc5673247d8ad57Hans Wennborgvoid __fastcall f9(int x, int y) {}; 563636fb126ffa22704c5eacb52fc5673247d8ad57Hans Wennborg// WIN: define x86_fastcallcc void @f9({{.*}}) 573636fb126ffa22704c5eacb52fc5673247d8ad57Hans Wennborgvoid __fastcall f10(int x, ...) {}; 583636fb126ffa22704c5eacb52fc5673247d8ad57Hans Wennborg// WIN: define void @f10({{.*}}) 5945d3950e373412f395413c81a0310e8090508608Hans Wennborgvoid __stdcall f11(int x, ...) {}; 6045d3950e373412f395413c81a0310e8090508608Hans Wennborg// WIN: define void @f11({{.*}}) 61