mirror of
https://github.com/intel/llvm.git
synced 2026-01-30 22:53:05 +08:00
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 llvm-svn: 245076
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user