Windows ARM: ignore calling conventions as described on MSDN

Summary:
MSDN says that fastcall, stdcall, thiscall, and vectorcall are all
accepted but ignored on ARM and X64.
https://msdn.microsoft.com/en-us/library/984x0h58.aspx

MSDN also says cdecl is also accepted and typically ignored
This patch brings ARM in line with how we ignore them for X64

Reviewers: rnk

Subscribers: compnerd, cfe-commits

Differential Revision: http://reviews.llvm.org/D12034

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@245076 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Martell Malone 2015-08-14 18:00:09 +00:00
parent 8cfc9bb3dc
commit dffa3701c7
3 changed files with 24 additions and 3 deletions

View File

@ -4959,6 +4959,19 @@ public:
BuiltinVaListKind getBuiltinVaListKind() const override {
return TargetInfo::CharPtrBuiltinVaList;
}
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override {
switch (CC) {
case CC_X86StdCall:
case CC_X86ThisCall:
case CC_X86FastCall:
case CC_X86VectorCall:
return CCCR_Ignore;
case CC_C:
return CCCR_OK;
default:
return CCCR_Warning;
}
}
};
// Windows ARM + Itanium C++ ABI Target

View File

@ -1,10 +1,9 @@
// RUN: %clang_cc1 -triple thumbv7-windows -fms-compatibility -fsyntax-only -verify %s
int __cdecl cdecl(int a, int b, int c, int d) { // expected-warning {{calling convention '__cdecl' ignored for this target}}
int __cdecl cdecl(int a, int b, int c, int d) { // expected-no-diagnostics
return a + b + c + d;
}
float __stdcall stdcall(float a, float b, float c, float d) { // expected-warning {{calling convention '__stdcall' ignored for this target}}
float __stdcall stdcall(float a, float b, float c, float d) { // expected-no-diagnostics
return a + b + c + d;
}

View File

@ -0,0 +1,9 @@
// RUN: %clang_cc1 -triple x86_64-windows -fms-compatibility -fsyntax-only -verify %s
int __cdecl cdecl(int a, int b, int c, int d) { // expected-no-diagnostics
return a + b + c + d;
}
float __stdcall stdcall(float a, float b, float c, float d) { // expected-no-diagnostics
return a + b + c + d;
}