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