c++: Avoid ICE with dependent attribute on type.
authorJason Merrill <jason@redhat.com>
Mon, 27 Jan 2020 10:45:01 +0000 (05:45 -0500)
committerJason Merrill <jason@redhat.com>
Mon, 27 Apr 2020 21:21:56 +0000 (17:21 -0400)
commit5f1cd1da1a805c3d00332da45c3ab78a3931af63
tree4b729b83f175414d577724f14267b6c8fafbacc5
parentbb7ed17aa1102de9f99fb9608f1119eb4df613fe
c++: Avoid ICE with dependent attribute on type.

We previously happened to accept this testcase, but never actually did
anything useful with the attribute.  The patch for PR86379 stopped using
TREE_TYPE as USING_DECL_SCOPE, so 'using A::b' no longer had TREE_TYPE set,
so the language-independent decl_attributes started crashing on it.

GNU attributes are more flexible in their placement than C++11 attributes,
so if we encounter a dependent GNU attribute that syntactically appertains
to a type rather than the declaration as a whole, move it to the
declaration; that's almost certainly what the user meant, anyway.

gcc/cp/ChangeLog
2020-04-27  Jason Merrill  <jason@redhat.com>

PR c++/90750
PR c++/79585
* decl.c (grokdeclarator): Move dependent attribute to decl.
* decl2.c (splice_template_attributes): No longer static.
gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/testsuite/g++.dg/ext/attr-type1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/warn/Wunused-var-26.C