[PATCH] Emit diagnostic on illegal calling convention
John McCall
rjmccall at apple.com
Thu Mar 28 11:07:15 PDT 2013
On Mar 28, 2013, at 10:57 AM, Alexander Zinenko <ftynse at gmail.com> wrote:
> On 23 March 2013 01:22, Alexander Zinenko <ftynse at gmail.com> wrote:
> Hi John, João!
>
> This patch adds a diagnostic if the following declarations have illegal calling conventions:
> * pointer to function, reference to function, pointer to member function variable (or function attribute) declaration;
> * function declaration;
> * typedef declaration.
>
> It was proposed in PR13457 discussion (http://llvm.org/bugs/show_bug.cgi?id=13457#c22).
>
> We already have such error for variadic functions declared with CC_X86Fastcall that is emitted from SemaType. But microsoft ABI has different allowed CCs depending on whether it is a member function and it can't be determined given FunctionType only (AFAIK, standard doesn't differentiate between free function and member function types). So this checking has to be done on declarations.
>
> With this patch, allowed calling conventions are ABI-specific. Therefore if we teach affected ABIs to disallow fastcall on variadic functions, we can remove the previous diagnostic.
>
> Please review!
>
> --
> Alex
>
> <callconv.patch>
I would only pass a flag distinguishing non-static member functions vs. everything else.
+ if (T->isFunctionProtoType())
+ ProtoType = T->getAs<FunctionProtoType>();
+ else if (T->isFunctionPointerType())
+ ProtoType = T->getPointeeType()->getAs<FunctionProtoType>();
+ else if (T->isReferenceType()) {
+ QualType RefType = T->getAs<ReferenceType>()->getPointeeType();
+ ProtoType = RefType->getAs<FunctionProtoType>();
+ } else if (T->isMemberFunctionPointerType()) {
+ QualType PointerType = T->getAs<MemberPointerType>()->getPointeeType();
Test the result of getAs<>, please.
John.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130328/825b948d/attachment.html>
More information about the cfe-commits
mailing list