aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2007-09-23 11:27:10 -0400
committerJason Merrill <jason@gcc.gnu.org>2007-09-23 11:27:10 -0400
commit823dd937db20d8f3d8c5bdf42e1d97dbefd3acae (patch)
tree735b6d2f664ebaa6197b73e19b4f2cda96754e7d
parent4637cb92287f1097aeac7f881e9b6149839b18e9 (diff)
downloadgcc-823dd937db20d8f3d8c5bdf42e1d97dbefd3acae.zip
gcc-823dd937db20d8f3d8c5bdf42e1d97dbefd3acae.tar.gz
gcc-823dd937db20d8f3d8c5bdf42e1d97dbefd3acae.tar.bz2
re PR c++/16370 (__attribute__((deprecated)) not useful on classes, and ugly function name listed for deperecation warnings on constructor)
PR c++/16370 * decl.c (grokdeclarator): Look through implicit TYPE_DECLs for deprecation warnings. From-SVN: r128691
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c4
-rw-r--r--gcc/testsuite/g++.dg/warn/deprecated-5.C4
-rw-r--r--gcc/testsuite/g++.dg/warn/deprecated.C4
4 files changed, 16 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 26cc832..79e96c6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2007-09-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/16370
+ * decl.c (grokdeclarator): Look through implicit TYPE_DECLs
+ for deprecation warnings.
+
2007-09-22 Jason Merrill <jason@redhat.com>
PR c++/15269
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index c589a4b..b898a02 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -7512,6 +7512,10 @@ grokdeclarator (const cp_declarator *declarator,
{
typedef_decl = type;
type = TREE_TYPE (typedef_decl);
+ if (TREE_DEPRECATED (type)
+ && DECL_ARTIFICIAL (typedef_decl)
+ && deprecated_state != DEPRECATED_SUPPRESS)
+ warn_deprecated_use (type);
}
/* No type at all: default to `int', and set DEFAULTED_INT
because it was not a user-defined typedef. */
diff --git a/gcc/testsuite/g++.dg/warn/deprecated-5.C b/gcc/testsuite/g++.dg/warn/deprecated-5.C
new file mode 100644
index 0000000..a015bd5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/deprecated-5.C
@@ -0,0 +1,4 @@
+// PR c++/16370
+
+struct Foo { int i; } __attribute__ ((deprecated));
+void foo() { Foo f; } // { dg-warning "deprecated" }
diff --git a/gcc/testsuite/g++.dg/warn/deprecated.C b/gcc/testsuite/g++.dg/warn/deprecated.C
index 15e8475..2107408 100644
--- a/gcc/testsuite/g++.dg/warn/deprecated.C
+++ b/gcc/testsuite/g++.dg/warn/deprecated.C
@@ -98,11 +98,11 @@ class T {
int x;
} __attribute__ ((deprecated));
-T *p3;
+T *p3; // { dg-warning "'T' is deprecated" }
inline void T::member1(int) {}
-int T::member3(T *p)
+int T::member3(T *p) // { dg-warning "'T' is deprecated" }
{
p->member1(1); /* { dg-warning "'void T::member1\\(int\\)' is deprecated" "" } */
(*p).member1(2); /* { dg-warning "'void T::member1\\(int\\)' is deprecated" "" } */