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