Commit d10402b4 by Dodji Seketeli Committed by Dodji Seketeli

PR c++/54372 - unused attribute inactive on dependant entities

In the example of this patch, gcc/g++ invoked with
-Wunused-local-typedefs warns on dependant entities even when those
are decorated with the 'unused' attribute.

This is because in cplus_decl_attributes, save_template_attributes
makes so that the 'unused' attribute is applied to its appertaining
entity only at instantiation time.  But then at parsing time
maybe_warn_unused_local_typedefs checks for TREE_USED before warning.

This patch applies the 'unused' attribute at compilation time.

Tested on x86_64-unknown-linux-gnu against trunk.

gcc/cp/

	* decl2.c (is_late_template_attribute): "unused" attribute is to
	be applied at compile time.

gcc/testsuite/

	* c-c++-common/Wunused-local-typedefs-2.c: New test.

From-SVN: r191830
parent 3b4441db
2012-09-28 Dodji Seketeli <dodji@redhat.com>
PR c++/54372 - unused attribute inactive on dependant entities
* decl2.c (is_late_template_attribute): "unused" attribute is to
be applied at compile time.
2012-09-25 Dodji Seketeli <dodji@redhat.com> 2012-09-25 Dodji Seketeli <dodji@redhat.com>
PR c++/29028 - Missed unused warning on using declaration PR c++/29028 - Missed unused warning on using declaration
......
...@@ -1104,6 +1104,11 @@ is_late_template_attribute (tree attr, tree decl) ...@@ -1104,6 +1104,11 @@ is_late_template_attribute (tree attr, tree decl)
if (is_attribute_p ("weak", name)) if (is_attribute_p ("weak", name))
return true; return true;
/* Attribute unused is applied directly, as it appertains to
decls. */
if (is_attribute_p ("unused", name))
return false;
/* If any of the arguments are dependent expressions, we can't evaluate /* If any of the arguments are dependent expressions, we can't evaluate
the attribute until instantiation time. */ the attribute until instantiation time. */
for (arg = args; arg; arg = TREE_CHAIN (arg)) for (arg = args; arg; arg = TREE_CHAIN (arg))
......
2012-09-28 Dodji Seketeli <dodji@redhat.com>
PR c++/54372 - unused attribute inactive on dependant entities
* c-c++-common/Wunused-local-typedefs-2.c: New test.
2012-09-25 Dodji Seketeli <dodji@redhat.com> 2012-09-25 Dodji Seketeli <dodji@redhat.com>
PR c++/29028 - Missed unused warning on using declaration PR c++/29028 - Missed unused warning on using declaration
......
/* Origin PR c++/54372
{ dg-options "-Wunused-local-typedefs" }
{ dg-do compile }
*/
template <typename T>
void f2()
{
typedef T t __attribute__((unused));
}
class S
{
template <typename T>
void f4()
{
typedef T t __attribute__((unused));
}
};
template <typename T>
class tS
{
void f()
{
typedef T t2 __attribute__((unused));
}
template <typename U>
void f2()
{
typedef T t1 __attribute__((unused));
typedef U t2 __attribute__((unused));
}
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment