From 823dd937db20d8f3d8c5bdf42e1d97dbefd3acae Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sun, 23 Sep 2007 11:27:10 -0400 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 4 ++++ gcc/testsuite/g++.dg/warn/deprecated-5.C | 4 ++++ gcc/testsuite/g++.dg/warn/deprecated.C | 4 ++-- 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/deprecated-5.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 26cc8322bf2..79e96c6c42c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-09-23 Jason Merrill + + PR c++/16370 + * decl.c (grokdeclarator): Look through implicit TYPE_DECLs + for deprecation warnings. + 2007-09-22 Jason Merrill PR c++/15269 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index c589a4bf5cd..b898a02d970 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 00000000000..a015bd50bae --- /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 15e8475e787..210740814f9 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" "" } */ -- 2.30.2