From 1a68a4e8c58faa0ba4d05a24826e8858757810b5 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sun, 23 Sep 2007 00:37:26 -0400 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/call.c | 5 +++++ gcc/testsuite/g++.dg/warn/deprecated-4.C | 9 +++++++++ 3 files changed, 17 insertions(+) create mode 100644 gcc/testsuite/g++.dg/warn/deprecated-4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4c4e5847d3a..26cc8322bf2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2007-09-22 Jason Merrill + 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 dc90d1952e1..645eeb26488 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 00000000000..e2f1a2c33ca --- /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" } +} -- 2.30.2