diff options
author | Jason Merrill <jason@redhat.com> | 2007-09-23 11:27:10 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2007-09-23 11:27:10 -0400 |
commit | 823dd937db20d8f3d8c5bdf42e1d97dbefd3acae (patch) | |
tree | 735b6d2f664ebaa6197b73e19b4f2cda96754e7d | |
parent | 4637cb92287f1097aeac7f881e9b6149839b18e9 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/deprecated-5.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/deprecated.C | 4 |
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" "" } */ |