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
This commit is contained in:
parent
3b4441db79
commit
d10402b413
|
@ -1,3 +1,9 @@
|
|||
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>
|
||||
|
||||
PR c++/29028 - Missed unused warning on using declaration
|
||||
|
|
|
@ -1104,6 +1104,11 @@ is_late_template_attribute (tree attr, tree decl)
|
|||
if (is_attribute_p ("weak", name))
|
||||
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
|
||||
the attribute until instantiation time. */
|
||||
for (arg = args; arg; arg = TREE_CHAIN (arg))
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
PR c++/29028 - Missed unused warning on using declaration
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
/* 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));
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue