[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