1 // RUN: clang-cc %s -verify -fsyntax-only
2 class A {
3   void f() __attribute__((deprecated));
4   void g(A* a);
5   void h(A* a) __attribute__((deprecated));
6 
7   int b __attribute__((deprecated));
8 };
9 
10 void A::g(A* a)
11 {
12   f(); // expected-warning{{'f' is deprecated}}
13   a->f(); // expected-warning{{'f' is deprecated}}
14 
15   (void)b; // expected-warning{{'b' is deprecated}}
16   (void)a->b; // expected-warning{{'b' is deprecated}}
17 }
18 
19 void A::h(A* a)
20 {
21   f();
22   a->f();
23 
24   (void)b;
25   (void)a->b;
26 }
27 
28 struct B {
29   virtual void f() __attribute__((deprecated));
30   void g();
31 };
32 
33 void B::g() {
34   f();
35   B::f(); // expected-warning{{'f' is deprecated}}
36 }
37 
38 struct C : B {
39   virtual void f();
40   void g();
41 };
42 
43 void C::g() {
44   f();
45   C::f();
46   B::f(); // expected-warning{{'f' is deprecated}}
47 }
48 
49 void f(B* b, C *c) {
50   b->f();
51   b->B::f(); // expected-warning{{'f' is deprecated}}
52 
53   c->f();
54   c->C::f();
55   c->B::f(); // expected-warning{{'f' is deprecated}}
56 }
57 
58 struct D {
59   virtual void f() __attribute__((deprecated));
60 };
61 
62 void D::f() { }
63 
64 void f(D* d) {
65   d->f();
66 }
67