aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2017-06-18 00:55:02 -0400
committerJason Merrill <jason@gcc.gnu.org>2017-06-18 00:55:02 -0400
commit20ef9df1cffcae042e02d596724e69c24047c557 (patch)
tree7bb4cc9ae9eda8094137afe950a76789fe715c2b
parent5ebcc5477a59dbe51c7e1130a2b751a2a1d89574 (diff)
downloadgcc-20ef9df1cffcae042e02d596724e69c24047c557.zip
gcc-20ef9df1cffcae042e02d596724e69c24047c557.tar.gz
gcc-20ef9df1cffcae042e02d596724e69c24047c557.tar.bz2
PR c++/60063 - -Wunused-local-typedefs and templates.
* decl2.c (is_late_template_attribute): Return false for "used". From-SVN: r249347
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/decl2.c5
-rw-r--r--gcc/testsuite/g++.dg/warn/Wunused-local-typedefs-4.C13
3 files changed, 19 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d082574..465e7d9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2017-06-17 Jason Merrill <jason@redhat.com>
+ PR c++/60063 - -Wunused-local-typedefs and templates.
+ * decl2.c (is_late_template_attribute): Return false for "used".
+
PR c++/70844 - -Wuseless-cast and inheriting constructor.
* method.c (forward_parm): Suppress warn_useless_cast.
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 69cb40f..72239ec 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -1091,9 +1091,10 @@ 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
+ /* Attributes used and unused are applied directly, as they appertain to
decls. */
- if (is_attribute_p ("unused", name))
+ if (is_attribute_p ("unused", name)
+ || is_attribute_p ("used", name))
return false;
/* Attribute tls_model wants to modify the symtab. */
diff --git a/gcc/testsuite/g++.dg/warn/Wunused-local-typedefs-4.C b/gcc/testsuite/g++.dg/warn/Wunused-local-typedefs-4.C
new file mode 100644
index 0000000..7efe112
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wunused-local-typedefs-4.C
@@ -0,0 +1,13 @@
+// PR c++/60063
+// { dg-options -Wunused-local-typedefs }
+
+template <class> struct S;
+
+void foo (int i) {
+ typedef __attribute__ ((used)) S<int> X;
+}
+
+template <class T>
+void bar (T i) {
+ typedef __attribute__ ((used)) S<T> Y;
+}