re PR c++/15269 (__attribute__((deprecated)) broken with inline, ignored with pure...
authorJason Merrill <jason@redhat.com>
Sun, 23 Sep 2007 04:37:26 +0000 (00:37 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Sun, 23 Sep 2007 04:37:26 +0000 (00:37 -0400)
        PR c++/15269
        * call.c (build_over_call): Warn about deprecated virtuals.

From-SVN: r128682

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/g++.dg/warn/deprecated-4.C [new file with mode: 0644]

index 4c4e5847d3a7476435893dba6ef5abc5f9d717e5..26cc8322bf212b7e1e946c6aa65d871ff45a7260 100644 (file)
@@ -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.
index dc90d1952e10d94e3d183fb4d1c5301b7fc97ce9..645eeb26488700494731cb28fd189264dca29090 100644 (file)
@@ -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 (file)
index 0000000..e2f1a2c
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/15269
+
+struct B { 
+    virtual int foo() __attribute__((deprecated)); 
+}; 
+int main(void) { 
+  ((B*)0)->foo();              // { dg-warning "deprecated" }
+}