[cfe-commits] [PATCH] forbid attributes on friend member function declaration

Richard Smith richard at metafoo.co.uk
Mon Nov 26 20:42:05 PST 2012


On Mon, Nov 26, 2012 at 6:43 PM, Michael Han <fragmentshaders at gmail.com>wrote:

> Hi Richard,
>
> I haven't looked into check it in Sema yet. I had the impression that this
> type of checks should be performed in parser if possible. Here is what I am
> thinking.
>
> There are two cases to deal with here
> - attributes appear before decl specifier of function:
>   [[]] friend into foo();
>   This case can already be detected in parser using
> ParsedAttributesWithRange.
>
> - attributes appear after function declarator id
>   friend int foo [[]] ();
>   Attributes in this case are parsed as part of parsing function
> declarator, so we need some way to pass the parsed attributes to caller
> where the syntactic checks are handled. I was using AttributeList for this.
> Without using it, it seems there are two additional options:
> Update Declarator so it can return a list of source ranges of C++11
> attributes that appertain to the declarator, as the source ranges are
> what's required to emit the "attributes not allowed here" type of
> diagnostic.
>
> Or
>
> Update ParseDeclarator so it takes an additional parameter of
> ParsedAttributesWithRange. It's probably not worth doing so as
> ParseDeclarator is invoked in a lot of places and this second parameter
> will only be useful once.
>
> What do you think? I can look into sema check if that is the right
> direction to go.
>

Hmm, how about rejecting the attributes in the first case after parsing the
decl-specifier-seq and before parsing any declarators, and rejecting the
attributes in the second case by checking whether you have a friend
declaration inside ParseDirectDeclarator? We should only produce one
diagnostic for this:

[[noreturn]] friend void f(), g();

... but we should produce two diagnostics for this:

friend void f [[noreturn]] (), g [[noreturn]] ();
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121126/daa93d27/attachment.html>


More information about the cfe-commits mailing list