[cfe-dev] Attribute on constructor parameter rejected

Guillaume Papin guillaume.papin at epitech.eu
Thu Sep 5 18:19:47 PDT 2013


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]]) {}

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





More information about the cfe-dev mailing list