On Mar 28, 2013, at 10:57 AM, Alexander Zinenko <[email protected]> wrote:
> On 23 March 2013 01:22, Alexander Zinenko <[email protected]> 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._______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits