diff options
Diffstat (limited to 'test/Sema/decl-microsoft-call-conv.c')
-rw-r--r-- | test/Sema/decl-microsoft-call-conv.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/test/Sema/decl-microsoft-call-conv.c b/test/Sema/decl-microsoft-call-conv.c new file mode 100644 index 000000000000..5a83b38b192f --- /dev/null +++ b/test/Sema/decl-microsoft-call-conv.c @@ -0,0 +1,35 @@ +// 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() {} |