// RUN: %clang_cc1 -triple i686-pc-win32 -verify %s // It's important that this is a .c file. // This is fine, as CrcGenerateTable*() has a prototype. void __fastcall CrcGenerateTableFastcall(void); void __fastcall CrcGenerateTableFastcall(); void __fastcall CrcGenerateTableFastcall() {} void __stdcall CrcGenerateTableStdcall(void); void __stdcall CrcGenerateTableStdcall(); void __stdcall CrcGenerateTableStdcall() {} void __thiscall CrcGenerateTableThiscall(void); void __thiscall CrcGenerateTableThiscall(); void __thiscall CrcGenerateTableThiscall() {} void __pascal CrcGenerateTablePascal(void); void __pascal CrcGenerateTablePascal(); void __pascal CrcGenerateTablePascal() {} void __vectorcall CrcGenerateTableVectorcall(void); void __vectorcall CrcGenerateTableVectorcall(); void __vectorcall CrcGenerateTableVectorcall() {} void __fastcall CrcGenerateTableNoProtoFastcall(); // expected-error{{function with no prototype cannot use the fastcall calling convention}} void __stdcall CrcGenerateTableNoProtoStdcall(); // expected-warning{{function with no prototype cannot use the stdcall calling convention}} void __thiscall CrcGenerateTableNoProtoThiscall(); // expected-error{{function with no prototype cannot use the thiscall calling convention}} void __pascal CrcGenerateTableNoProtoPascal(); // expected-error{{function with no prototype cannot use the pascal calling convention}} void __vectorcall CrcGenerateTableNoProtoVectorcall(); // expected-error{{function with no prototype cannot use the vectorcall calling convention}} void __fastcall CrcGenerateTableNoProtoDefFastcall() {} void __stdcall CrcGenerateTableNoProtoDefStdcall() {} void __thiscall CrcGenerateTableNoProtoDefThiscall() {} void __pascal CrcGenerateTableNoProtoDefPascal() {} void __vectorcall CrcGenerateTableNoProtoDefVectorcall() {} // Regular calling convention is fine. void CrcGenerateTableNoProto() {}