[cfe-dev] Attribute on constructor parameter rejected

Richard Smith richard at metafoo.co.uk
Thu Sep 5 18:27:52 PDT 2013


On Thu, Sep 5, 2013 at 6:19 PM, Guillaume Papin
<guillaume.papin at epitech.eu>wrote:

> Great, that was fast.
>
> Just in case someone read the code of the example, I believe the
> attribute [[gnu::unused]] should be used after the parameter name
> instead of before its type.
>
>   void f(int i [[gnu::unused]]) {}


As it happens, both locations are valid, and mean the same thing. You could
move the attribute after the parameter name to work around the problem,
however.


> Richard Smith <richard at metafoo.co.uk> writes:
>
> > On Thu, Sep 5, 2013 at 12:50 PM, Guillaume Papin <
> guillaume.papin at epitech.eu>
> > wrote:
> >
> >     Hum, I updated yesterday so it's quite recent. I tried the following
> >     with both my system-wide install of clang (version 3.2) and the one I
> >     built after my update yesterday:
> >
> >       [papin_g:~/GSoC/build]$ cat /tmp/gnu-unused.cpp
> >
> >       struct AB {
> >         AB([[gnu::unused]] int i) {}
> >
> >         void f([[gnu::unused]] int i) {} // no error for this line
> >       };
> >
> >       [papin_g:~/GSoC/build]$ ./bin/clang++ -std=c++11 -fsyntax-only
> >     /tmp/gnu-unused.cpp
> >       /tmp/gnu-unused.cpp:2:6: error: expected member name or ';' after
> >     declaration specifiers
> >
> >         AB([[gnu::unused]] int i) {}
> >
> >         ~~ ^
> >       /tmp/gnu-unused.cpp:2:6: error: an attribute list cannot appear
> here
> >
> >         AB([[gnu::unused]] int i) {}
> >
> >            ^~~~~~~~~~~~~~~
> >       /tmp/gnu-unused.cpp:2:22: error: expected ')'
> >
> >         AB([[gnu::unused]] int i) {}
> >
> >                            ^
> >       /tmp/gnu-unused.cpp:2:5: note: to match this '('
> >
> >         AB([[gnu::unused]] int i) {}
> >
> >           ^
> >       3 errors generated.
> >
> >
> >     I will update Clang tomorrow and see if the problem persists. Maybe
> it's
> >     only me and I checked out at the wrong time or it's has been fixed
> since
> >     yesterday.
> >
> >
> > This was a bug in our disambiguation of constructor / non-constructor
> > declarations. Fixed in r190111, thanks.
> >
> >
> >     Aaron Ballman <aaron at aaronballman.com> writes:
> >
> >     > On Thu, Sep 5, 2013 at 11:49 AM, Guillaume Papin
> >     > <guillaume.papin at epitech.eu> wrote:
> >     >> Hi,
> >     >>
> >     >> While testing some code with attributes I found the following
> that looks
> >     >> like a bug to me:
> >     >>
> >     >>   $ clang-check /tmp/unused.cpp -- -std=c++11
> >     >>
> >     >>   struct AB {
> >     >>     AB([[gnu::unused]] int i) {}
> >     >>     // ^~~~~~~~~~~~~~~ /tmp/unused.cpp:2:5: error: an attribute
> list
> >     cannot appear here
> >     >>
> >     >>     void f([[gnu::unused]] int i) {} // no error for this line
> >     >>   };
> >     >>
> >     >> Do constructors have different parameter-declaration-list than
> member
> >     >> functions?
> >     >
> >     > They do not -- are you using ToT?  I get no errors with your code
> on a
> >     > relatively recent build.
> >     >
> >     > ~Aaron
> >     >
> >
> >
> >     --
> >     Guillaume Papin
> >
> >
> >
> >     _______________________________________________
> >     cfe-dev mailing list
> >     cfe-dev at cs.uiuc.edu
> >     http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
> >
> >
>
> --
> Guillaume Papin
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130905/ac4d5751/attachment.html>


More information about the cfe-dev mailing list