1*6345e84dSZachary Turner // Build with "cl.exe /Zi /GR- /GS- -EHs-c- every-function.cpp /link /debug /nodefaultlib /incremental:no /entry:main" 2*6345e84dSZachary Turner // Getting functions with the correct calling conventions requires building in x86. 3*6345e84dSZachary Turner 4*6345e84dSZachary Turner // clang-format off 5*6345e84dSZachary Turner void *__purecall = 0; 6*6345e84dSZachary Turner operator delete(void *,unsigned int)7*6345e84dSZachary Turnervoid __cdecl operator delete(void *,unsigned int) {} operator delete(void *,unsigned __int64)8*6345e84dSZachary Turnervoid __cdecl operator delete(void *,unsigned __int64) {} 9*6345e84dSZachary Turner 10*6345e84dSZachary Turner // All calling conventions that appear in normal code. cc_cdecl()11*6345e84dSZachary Turnerint __cdecl cc_cdecl() { return 42; } cc_stdcall()12*6345e84dSZachary Turnerint __stdcall cc_stdcall() { return 42; } cc_fastcall()13*6345e84dSZachary Turnerint __fastcall cc_fastcall() { return 42; } cc_vectorcall()14*6345e84dSZachary Turnerint __vectorcall cc_vectorcall() { return 42; } 15*6345e84dSZachary Turner 16*6345e84dSZachary Turner 17*6345e84dSZachary Turner struct Struct { StructStruct18*6345e84dSZachary Turner Struct() {} // constructor 19*6345e84dSZachary Turner cc_thiscallStruct20*6345e84dSZachary Turner int __thiscall cc_thiscall() { return 42; } 21*6345e84dSZachary Turner MStruct22*6345e84dSZachary Turner void M() { } CMStruct23*6345e84dSZachary Turner void CM() const { } VMStruct24*6345e84dSZachary Turner void VM() volatile { } CVMStruct25*6345e84dSZachary Turner void CVM() const volatile { } 26*6345e84dSZachary Turner }; 27*6345e84dSZachary Turner builtin_one_param(int x)28*6345e84dSZachary Turnerint builtin_one_param(int x) { return 42; } builtin_two_params(int x,char y)29*6345e84dSZachary Turnerint builtin_two_params(int x, char y) { return 42; } 30*6345e84dSZachary Turner struct_one_param(Struct S)31*6345e84dSZachary Turnervoid struct_one_param(Struct S) { } 32*6345e84dSZachary Turner modified_builtin_param(const int X)33*6345e84dSZachary Turnervoid modified_builtin_param(const int X) { } modified_struct_param(const Struct S)34*6345e84dSZachary Turnervoid modified_struct_param(const Struct S) { } 35*6345e84dSZachary Turner pointer_builtin_param(int * X)36*6345e84dSZachary Turnervoid pointer_builtin_param(int *X) { } pointer_struct_param(Struct * S)37*6345e84dSZachary Turnervoid pointer_struct_param(Struct *S) { } 38*6345e84dSZachary Turner 39*6345e84dSZachary Turner modified_pointer_builtin_param(const int * X)40*6345e84dSZachary Turnervoid modified_pointer_builtin_param(const int *X) { } modified_pointer_struct_param(const Struct * S)41*6345e84dSZachary Turnervoid modified_pointer_struct_param(const Struct *S) { } 42*6345e84dSZachary Turner rvo()43*6345e84dSZachary TurnerStruct rvo() { return Struct(); } 44*6345e84dSZachary Turner 45*6345e84dSZachary Turner struct Base1 { ~Base1Base146*6345e84dSZachary Turner virtual ~Base1() {} 47*6345e84dSZachary Turner }; 48*6345e84dSZachary Turner 49*6345e84dSZachary Turner struct Base2 : public virtual Base1 { }; 50*6345e84dSZachary Turner 51*6345e84dSZachary Turner struct Derived : public virtual Base1, public Base2 { 52*6345e84dSZachary Turner }; 53*6345e84dSZachary Turner 54*6345e84dSZachary Turner main()55*6345e84dSZachary Turnerint main() { 56*6345e84dSZachary Turner cc_cdecl(); 57*6345e84dSZachary Turner cc_stdcall(); 58*6345e84dSZachary Turner cc_fastcall(); 59*6345e84dSZachary Turner Struct().cc_thiscall(); 60*6345e84dSZachary Turner cc_vectorcall(); 61*6345e84dSZachary Turner 62*6345e84dSZachary Turner builtin_one_param(42); 63*6345e84dSZachary Turner builtin_two_params(42, 'x'); 64*6345e84dSZachary Turner struct_one_param(Struct{}); 65*6345e84dSZachary Turner 66*6345e84dSZachary Turner modified_builtin_param(42); 67*6345e84dSZachary Turner modified_struct_param(Struct()); 68*6345e84dSZachary Turner 69*6345e84dSZachary Turner pointer_builtin_param(nullptr); 70*6345e84dSZachary Turner pointer_struct_param(nullptr); 71*6345e84dSZachary Turner 72*6345e84dSZachary Turner 73*6345e84dSZachary Turner modified_pointer_builtin_param(nullptr); 74*6345e84dSZachary Turner modified_pointer_struct_param(nullptr); 75*6345e84dSZachary Turner 76*6345e84dSZachary Turner Struct S = rvo(); 77*6345e84dSZachary Turner 78*6345e84dSZachary Turner Derived D; 79*6345e84dSZachary Turner return 42; 80*6345e84dSZachary Turner } 81