From ef2aa4f1450920bba4e6609137eae31049328e4d Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Mon, 7 Aug 2017 20:52:04 +0000 Subject: [PATCH] [AArch64] Ignore stdcall and similar on aarch64/windows This is similar to what's done on arm and x86_64, where these calling conventions are silently ignored, as in SVN r245076. Differential Revision: https://reviews.llvm.org/D36105 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@310303 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets/AArch64.cpp | 17 +++++++++++++++++ lib/Basic/Targets/AArch64.h | 2 ++ .../arm-windows-calling-convention-handling.c | 1 + 3 files changed, 20 insertions(+) diff --git a/lib/Basic/Targets/AArch64.cpp b/lib/Basic/Targets/AArch64.cpp index 16c4c21e38..af2e35bb86 100644 --- a/lib/Basic/Targets/AArch64.cpp +++ b/lib/Basic/Targets/AArch64.cpp @@ -458,6 +458,23 @@ MicrosoftARM64TargetInfo::getBuiltinVaListKind() const { return TargetInfo::CharPtrBuiltinVaList; } +TargetInfo::CallingConvCheckResult +MicrosoftARM64TargetInfo::checkCallingConvention(CallingConv CC) const { + switch (CC) { + case CC_X86StdCall: + case CC_X86ThisCall: + case CC_X86FastCall: + case CC_X86VectorCall: + return CCCR_Ignore; + case CC_C: + case CC_OpenCLKernel: + case CC_Win64: + return CCCR_OK; + default: + return CCCR_Warning; + } +} + DarwinAArch64TargetInfo::DarwinAArch64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) : DarwinTargetInfo(Triple, Opts) { diff --git a/lib/Basic/Targets/AArch64.h b/lib/Basic/Targets/AArch64.h index 237586850c..a720791a91 100644 --- a/lib/Basic/Targets/AArch64.h +++ b/lib/Basic/Targets/AArch64.h @@ -105,6 +105,8 @@ public: MacroBuilder &Builder) const override; BuiltinVaListKind getBuiltinVaListKind() const override; + + CallingConvCheckResult checkCallingConvention(CallingConv CC) const override; }; class LLVM_LIBRARY_VISIBILITY AArch64beTargetInfo : public AArch64TargetInfo { diff --git a/test/Parser/arm-windows-calling-convention-handling.c b/test/Parser/arm-windows-calling-convention-handling.c index ee25e60193..13669b1963 100644 --- a/test/Parser/arm-windows-calling-convention-handling.c +++ b/test/Parser/arm-windows-calling-convention-handling.c @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -triple thumbv7-windows -fms-compatibility -fsyntax-only -verify %s +// RUN: %clang_cc1 -triple aarch64-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; -- 2.40.0