[cfe-dev] C++11 attributes parsing

John McCall rjmccall at apple.com
Mon Jul 9 10:37:49 PDT 2012

On Jul 9, 2012, at 5:14 AM, Chandler Carruth wrote:
> On Fri, Jul 6, 2012 at 10:29 AM, John McCall <rjmccall at apple.com> wrote:
> On Jul 6, 2012, at 7:16 AM, Alexander Kornienko wrote:
> > The whole purpose of this e-mail is to gather ideas regarding our needs for C++11 attributes parsing. Right now, only select attributes are parsed in C++11 style, attribute arguments parsing is not implemented, there's no common check for matching attribute targets ("Subjects" field in Attr.td). BTW, AFAIK, the latter is not implemented for GNU-style attributes either.
> >
> > Currently, I see the following questions:
> > 1. will we allow c++11 syntax for existing GNU attributes?
> Probably not.  If we do, there's a potential for collision with attributes introduced by the committee.  It doesn't seem to have any benefits except giving users a prettier syntax for writing code that is totally unportable between compilers.
> I think there are a very few specific GNU attributes that we should support in either syntax: ones that are really Clang attributes but happen to be in GNU syntax currently:
> - Thread safety attributes
> - Some of the LLVM attributes such as readnone
> - Attributes with very active users that would specifically benefit from the improved syntax of C++11 attributes: format string, non-null, and other argument-related attributes which are of particular use to static analysis tools built in and around clang.

Putting an attribute on a parameter declaration is exactly the same with GNU attributes as with C++11 attributes.  The actual problem here is that these attributes, by design, are currently placed on the *function* with an awkward mapping back to parameter indexes.  You could certainly come up with a different design in which these attributes are placed on the parameter, but doing that isn't really inherent to migrating to C++11, and I suspect that the wider community would be a lot happier if we *didn't* tie that feature somewhat randomly to C++11.

That said, I don't really have a problem with exposing attributes in both syntaxes as long as they're namespaced appropriately.

> That said, I don't think even these would ever be directly ported. We would naturally use the new name spacing utility to pave the way for increased portability. I would also assume this would be used as a good opportunity to re-think any syntactical problems we've hit over the years, and maybe talk to GCC folks to come up with an agreed-upon set of common names for those likely to be supported in both compilers (format string, non-null, etc).
> > 2. what new attributes do we expect to appear in c++11 syntax?
> Impossible to say;  it depends on the committee.
> > 3. will they require late parsing of parameters?
> Unlikely, but possible.
> The thread safety attributes at the least would benefit from this, and there is definitely a desire to migrate those to C++11 syntax on our end.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120709/02396816/attachment.html>

More information about the cfe-dev mailing list