summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/deprecated-copy.cpp
blob: 4d3e798d912baa46aad964541909baeccadbbd77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// RUN: %clang_cc1 -std=c++11 %s -Wdeprecated-copy -verify
// RUN: %clang_cc1 -std=c++11 %s -Wdeprecated-copy-dtor -DDEPRECATED_COPY_DTOR -verify
// RUN: %clang_cc1 -std=c++11 %s -Wextra -verify

#ifdef DEPRECATED_COPY_DTOR
struct A {
  int *ptr;
  ~A() { delete ptr; } // expected-warning {{definition of implicit copy constructor for 'A' is deprecated because it has a user-declared destructor}}
};

void foo() {
  A a{};
  A b = a; // expected-note {{implicit copy constructor for 'A' first required here}}
}
#else
struct B {
  B &operator=(const B &); // expected-warning {{definition of implicit copy constructor for 'B' is deprecated because it has a user-declared copy assignment operator}}
};

void bar() {
  B b1, b2(b1); // expected-note {{implicit copy constructor for 'B' first required here}}
}
#endif
OpenPOWER on IntegriCloud