xref: /aosp_15_r20/external/clang/test/Sema/decl-microsoft-call-conv.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple i686-pc-win32 -verify %s
2*67e74705SXin Li 
3*67e74705SXin Li // It's important that this is a .c file.
4*67e74705SXin Li 
5*67e74705SXin Li // This is fine, as CrcGenerateTable*() has a prototype.
6*67e74705SXin Li void __fastcall CrcGenerateTableFastcall(void);
7*67e74705SXin Li void __fastcall CrcGenerateTableFastcall();
CrcGenerateTableFastcall()8*67e74705SXin Li void __fastcall CrcGenerateTableFastcall() {}
9*67e74705SXin Li void __stdcall CrcGenerateTableStdcall(void);
10*67e74705SXin Li void __stdcall CrcGenerateTableStdcall();
CrcGenerateTableStdcall()11*67e74705SXin Li void __stdcall CrcGenerateTableStdcall() {}
12*67e74705SXin Li void __thiscall CrcGenerateTableThiscall(void);
13*67e74705SXin Li void __thiscall CrcGenerateTableThiscall();
CrcGenerateTableThiscall()14*67e74705SXin Li void __thiscall CrcGenerateTableThiscall() {}
15*67e74705SXin Li void __pascal CrcGenerateTablePascal(void);
16*67e74705SXin Li void __pascal CrcGenerateTablePascal();
CrcGenerateTablePascal()17*67e74705SXin Li void __pascal CrcGenerateTablePascal() {}
18*67e74705SXin Li void __vectorcall CrcGenerateTableVectorcall(void);
19*67e74705SXin Li void __vectorcall CrcGenerateTableVectorcall();
CrcGenerateTableVectorcall()20*67e74705SXin Li void __vectorcall CrcGenerateTableVectorcall() {}
21*67e74705SXin Li 
22*67e74705SXin Li void __fastcall CrcGenerateTableNoProtoFastcall(); // expected-error{{function with no prototype cannot use the fastcall calling convention}}
23*67e74705SXin Li void __stdcall CrcGenerateTableNoProtoStdcall(); // expected-warning{{function with no prototype cannot use the stdcall calling convention}}
24*67e74705SXin Li void __thiscall CrcGenerateTableNoProtoThiscall(); // expected-error{{function with no prototype cannot use the thiscall calling convention}}
25*67e74705SXin Li void __pascal CrcGenerateTableNoProtoPascal(); // expected-error{{function with no prototype cannot use the pascal calling convention}}
26*67e74705SXin Li void __vectorcall CrcGenerateTableNoProtoVectorcall(); // expected-error{{function with no prototype cannot use the vectorcall calling convention}}
27*67e74705SXin Li 
CrcGenerateTableNoProtoDefFastcall()28*67e74705SXin Li void __fastcall CrcGenerateTableNoProtoDefFastcall() {}
CrcGenerateTableNoProtoDefStdcall()29*67e74705SXin Li void __stdcall CrcGenerateTableNoProtoDefStdcall() {}
CrcGenerateTableNoProtoDefThiscall()30*67e74705SXin Li void __thiscall CrcGenerateTableNoProtoDefThiscall() {}
CrcGenerateTableNoProtoDefPascal()31*67e74705SXin Li void __pascal CrcGenerateTableNoProtoDefPascal() {}
CrcGenerateTableNoProtoDefVectorcall()32*67e74705SXin Li void __vectorcall CrcGenerateTableNoProtoDefVectorcall() {}
33*67e74705SXin Li 
34*67e74705SXin Li // Regular calling convention is fine.
CrcGenerateTableNoProto()35*67e74705SXin Li void CrcGenerateTableNoProto() {}
36