[Bug c++/60955] Erroneous warning about taking address of register with std=c++1y
manu at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Apr 26 16:40:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60955
Manuel López-Ibáñez <manu at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2014-04-26
CC| |manu at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #3 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
(In reply to Harald van Dijk from comment #2)
> This is caused by the implementation of C++1y decltype(auto), where
> seemingly redundant parentheses around an identifier must not simply be
> removed, because they may be significant.
>
> int a;
> decltype(auto) b = a; // means int b = a;
> decltype(auto) c = (a); // means int &c = a;
>
> GCC implements this by transforming (a) into static_cast<int &>(a)
> (force_paren_expr in gcc/cp/semantics.c), which would normally be a no-op,
> but causes the warning when a is declared using the "register" keyword.
It is pretty awful that C++14 has made extra parentheses to become significant.
But yes, this explains this bug and also PR57573.
It would be nice if expressions could be marked as compiler-generated, like we
have DECL_ARTIFICIAL for declarations. But you could set TREE_NO_WARNING(expr)
= true and check that in the warning code.
More information about the Gcc-bugs
mailing list