diff options
author | Jason Merrill <jason@redhat.com> | 2007-09-23 00:37:26 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2007-09-23 00:37:26 -0400 |
commit | 1a68a4e8c58faa0ba4d05a24826e8858757810b5 (patch) | |
tree | cd518cf32cafeb7aebd38404a89c55ecc8f0513a | |
parent | a7f6bc8c748862257b9b6e22034fd4ae0ffd4c38 (diff) | |
download | gcc-1a68a4e8c58faa0ba4d05a24826e8858757810b5.zip gcc-1a68a4e8c58faa0ba4d05a24826e8858757810b5.tar.gz gcc-1a68a4e8c58faa0ba4d05a24826e8858757810b5.tar.bz2 |
re PR c++/15269 (__attribute__((deprecated)) broken with inline, ignored with pure virtual, misreported after definition)
PR c++/15269
* call.c (build_over_call): Warn about deprecated virtuals.
From-SVN: r128682
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/call.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/deprecated-4.C | 9 |
3 files changed, 17 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4c4e584..26cc832 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2007-09-22 Jason Merrill <jason@redhat.com> + PR c++/15269 + * call.c (build_over_call): Warn about deprecated virtuals. + PR c++/19407 * cp-tree.h (ATTR_IS_DEPENDENT): New macro. (MAYBE_TAGGED_TYPE_P): Remove. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index dc90d19..645eeb2 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -5128,6 +5128,11 @@ build_over_call (struct z_candidate *cand, int flags) ba_any, NULL); gcc_assert (binfo && binfo != error_mark_node); + /* Warn about deprecated virtual functions now, since we're about + to throw away the decl. */ + if (TREE_DEPRECATED (fn)) + warn_deprecated_use (fn); + argarray[0] = build_base_path (PLUS_EXPR, argarray[0], binfo, 1); if (TREE_SIDE_EFFECTS (argarray[0])) argarray[0] = save_expr (argarray[0]); diff --git a/gcc/testsuite/g++.dg/warn/deprecated-4.C b/gcc/testsuite/g++.dg/warn/deprecated-4.C new file mode 100644 index 0000000..e2f1a2c --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/deprecated-4.C @@ -0,0 +1,9 @@ +// PR c++/15269 + +struct B { + virtual int foo() __attribute__((deprecated)); +}; + +int main(void) { + ((B*)0)->foo(); // { dg-warning "deprecated" } +} |