From 58108198924c4dcc4c9a62f706c32ad902e95860 Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Wed, 18 Dec 2013 16:23:37 +0000 Subject: [PATCH] Implement the MSABI and SysVABI calling conventions for Objective-C method declarations. This appears to be an omission from r189644. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197584 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGCall.cpp | 11 +++++++++-- test/CodeGenObjC/attr-callconv.m | 6 ++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 50cbdb1b07..8cc61e99bf 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -123,7 +123,7 @@ CodeGenTypes::arrangeFreeFunctionType(CanQual FTP) { return ::arrangeFreeFunctionType(*this, argTypes, FTP); } -static CallingConv getCallingConventionForDecl(const Decl *D) { +static CallingConv getCallingConventionForDecl(const Decl *D, bool IsWindows) { // Set the appropriate calling convention for the Function. if (D->hasAttr()) return CC_X86StdCall; @@ -146,6 +146,12 @@ static CallingConv getCallingConventionForDecl(const Decl *D) { if (D->hasAttr()) return CC_IntelOclBicc; + if (D->hasAttr()) + return IsWindows ? CC_C : CC_X86_64Win64; + + if (D->hasAttr()) + return IsWindows ? CC_X86_64SysV : CC_C; + return CC_C; } @@ -293,7 +299,8 @@ CodeGenTypes::arrangeObjCMessageSendSignature(const ObjCMethodDecl *MD, } FunctionType::ExtInfo einfo; - einfo = einfo.withCallingConv(getCallingConventionForDecl(MD)); + bool IsWindows = getContext().getTargetInfo().getTriple().isOSWindows(); + einfo = einfo.withCallingConv(getCallingConventionForDecl(MD, IsWindows)); if (getContext().getLangOpts().ObjCAutoRefCount && MD->hasAttr()) diff --git a/test/CodeGenObjC/attr-callconv.m b/test/CodeGenObjC/attr-callconv.m index bfc8a191cd..b0a41f7438 100644 --- a/test/CodeGenObjC/attr-callconv.m +++ b/test/CodeGenObjC/attr-callconv.m @@ -5,7 +5,9 @@ @end @implementation Test -- (void)test __attribute__((stdcall)) { +- (void)test __attribute__((stdcall)) {} // CHECK: define{{.*}}x86_stdcallcc{{.*}}Test test -} + +- (void)test2 __attribute__((ms_abi)) {} + // CHECK: define{{.*}}x86_64_win64cc{{.*}}Test test2 @end -- 2.40.0