brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.6 KiB · 0286cb0 Raw
269 lines · cpp
1// RUN: %clang_cc1 %s -verify -fexceptions2class A {3  void f() __attribute__((deprecated)); // expected-note 2 {{'f' has been explicitly marked deprecated here}}4  void g(A* a);5  void h(A* a) __attribute__((deprecated));6 7  int b __attribute__((deprecated)); // expected-note 2 {{'b' has been explicitly marked deprecated here}}8};9 10void 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 19void A::h(A* a)20{21  f();22  a->f();23  24  (void)b;25  (void)a->b;26}27 28struct B {29  virtual void f() __attribute__((deprecated)); // expected-note 6 {{'f' has been explicitly marked deprecated here}}30  void g();31};32 33void B::g() {34  f(); // expected-warning{{'f' is deprecated}}35  B::f(); // expected-warning{{'f' is deprecated}}36}37 38struct C : B {39  virtual void f();40  void g();41};42 43void C::g() {44  f();45  C::f();46  B::f(); // expected-warning{{'f' is deprecated}}47}48 49void f(B* b, C *c) {50  b->f(); // expected-warning{{'f' is deprecated}}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 58struct D {59  virtual void f() __attribute__((deprecated));// expected-note{{'f' has been explicitly marked deprecated here}}60  virtual void f(int) __attribute__((deprecated));// expected-note{{'f' has been explicitly marked deprecated here}}61  virtual void f(int, int) __attribute__((deprecated));// expected-note{{'f' has been explicitly marked deprecated here}}62};63 64void D::f() { } 65void D::f(int v) { } 66void D::f(int v1, int v2) { } 67 68void f(D* d) {69  d->f(); // expected-warning{{'f' is deprecated}}70  d->f(42); // expected-warning{{'f' is deprecated}}71  d->f(42, 24); // expected-warning{{'f' is deprecated}}72}73 74 75// Overloaded namespace members.76namespace test1 {77  void foo(int) __attribute__((deprecated)); // expected-note {{'foo' has been explicitly marked deprecated here}}78  void test1() { foo(10); } // expected-warning {{deprecated}}79  void foo(short) __attribute__((deprecated)); // expected-note {{'foo' has been explicitly marked deprecated here}}80  void test2(short s) { foo(s); } // expected-warning {{deprecated}}81  void foo(long);82  void test3(long l) { foo(l); }83  struct A {84    friend void foo(A*) __attribute__((deprecated)); // expected-note {{'foo' has been explicitly marked deprecated here}}85  };86  void test4(A *a) { foo(a); } // expected-warning {{deprecated}}87 88  namespace ns {89    struct Foo {};90    void foo(const Foo &f) __attribute__((deprecated)); // expected-note {{'foo' has been explicitly marked deprecated here}}91  }92  void test5() {93    foo(ns::Foo()); // expected-warning {{deprecated}}94  }95}96 97// Overloaded class members.98namespace test2 {99  struct A {100    void foo(int) __attribute__((deprecated)); // expected-note 2 {{'foo' has been explicitly marked deprecated here}}101    void foo(long);102    static void bar(int) __attribute__((deprecated)); // expected-note 3 {{'bar' has been explicitly marked deprecated here}}103    static void bar(long);104 105    void test2(int i, long l);106  };107  void test1(int i, long l) {108    A a;109    a.foo(i); // expected-warning {{deprecated}}110    a.foo(l);111    a.bar(i); // expected-warning {{deprecated}}112    a.bar(l);113    A::bar(i); // expected-warning {{deprecated}}114    A::bar(l);115  }116 117  void A::test2(int i, long l) {118    foo(i); // expected-warning {{deprecated}}119    foo(l);120    bar(i); // expected-warning {{deprecated}}121    bar(l);122  }123}124 125// Overloaded operators.126namespace test3 {127  struct A {128    void operator*(const A &);129    void operator*(int) __attribute__((deprecated)); // expected-note {{'operator*' has been explicitly marked deprecated here}}130    void operator-(const A &) const;131  };132  void operator+(const A &, const A &);133  void operator+(const A &, int) __attribute__((deprecated)); // expected-note {{'operator+' has been explicitly marked deprecated here}}134  void operator-(const A &, int) __attribute__((deprecated)); // expected-note {{'operator-' has been explicitly marked deprecated here}}135 136  void test() {137    A a, b;138    a + b;139    a + 1; // expected-warning {{deprecated}}140    a - b;141    a - 1; // expected-warning {{deprecated}}142    a * b;143    a * 1; // expected-warning {{deprecated}}144  }145}146 147// Overloaded operator call.148namespace test4 {149  struct A {150    typedef void (*intfn)(int);151    typedef void (*unintfn)(unsigned);152    operator intfn() __attribute__((deprecated)); // expected-note {{'operator void (*)(int)' has been explicitly marked deprecated here}}153    operator unintfn();154    void operator ()(A &) __attribute__((deprecated)); // expected-note {{'operator()' has been explicitly marked deprecated here}}155    void operator ()(const A &);156  };157 158  void test() {159    A a;160    a(1); // expected-warning {{deprecated}}161    a(1U);162 163    A &b = a;164    const A &c = a;165    a(b); // expected-warning {{deprecated}}166    a(c);167  }168}169 170namespace test5 {171  struct A {172    operator int() __attribute__((deprecated)); // expected-note 3 {{'operator int' has been explicitly marked deprecated here}}173    operator long();174  };175  void test1(A a) {176    int i = a; // expected-warning {{deprecated}}177    long l = a;178  }179 180  void foo(int);181  void foo(void*);182  void bar(long);183  void bar(void*);184  void test2(A a) {185    foo(a); // expected-warning {{deprecated}}186    bar(a);187  }188 189  struct B {190    int myInt;191    long myLong;192 193    B(A &a) :194      myInt(a), // expected-warning {{deprecated}}195      myLong(a)196    {}197  };198}199 200namespace test6 {201  enum __attribute__((deprecated)) A { // expected-note 2 {{'A' has been explicitly marked deprecated here}}202    a0203  };204  void testA() {205    A x; // expected-warning {{'A' is deprecated}}206    x = a0; // expected-warning {{'a0' is deprecated}}207  }208  209  enum B {210    b0 __attribute__((deprecated)), // expected-note {{'b0' has been explicitly marked deprecated here}}211    b1212  };213  void testB() {214    B x;215    x = b0; // expected-warning {{'b0' is deprecated}}216    x = b1;217  }218 219  template <class T> struct C {220    enum __attribute__((deprecated)) Enum { // expected-note 2 {{'Enum' has been explicitly marked deprecated here}}221      c0222    };223  };224  void testC() {225    C<int>::Enum x; // expected-warning {{'Enum' is deprecated}}226    x = C<int>::c0; // expected-warning {{'c0' is deprecated}}227  }228 229  template <class T> struct D {230    enum Enum {231      d0,232      d1 __attribute__((deprecated)), // expected-note {{'d1' has been explicitly marked deprecated here}}233    };234  };235  void testD() {236    D<int>::Enum x;237    x = D<int>::d0;238    x = D<int>::d1; // expected-warning {{'d1' is deprecated}}239  }240}241 242namespace test7 {243  struct X {244    void* operator new(typeof(sizeof(void*))) __attribute__((deprecated));  // expected-note{{'operator new' has been explicitly marked deprecated here}}245    void operator delete(void *) __attribute__((deprecated));  // expected-note{{'operator delete' has been explicitly marked deprecated here}}246  };247 248  void test() {249    X *x = new X;  // expected-warning{{'operator new' is deprecated}} expected-warning{{'operator delete' is deprecated}}250  }251}252 253typedef struct TDS {254} TDS __attribute__((deprecated)); // expected-note {{'TDS' has been explicitly marked deprecated here}}255TDS tds; // expected-warning {{'TDS' is deprecated}}256struct TDS tds2; // no warning, attribute only applies to the typedef.257 258namespace test8 {259struct A {260  // expected-note@+1 {{'B' has been explicitly marked deprecated here}}261  struct __attribute__((deprecated)) B {};262};263template <typename T> struct D : T {264  using typename T::B;265  B b; // expected-warning {{'B' is deprecated}}266};267D<A> da; // expected-note {{in instantiation of template class}}268} // namespace test8269