mirror of https://github.com/microsoft/clang.git
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:
parent
8cfc9bb3dc
commit
dffa3701c7
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue