Comments
Patch
@@ -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))
new file mode 100644
@@ -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));
+ }
+};