1// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3struct S {
4   S (S);  // expected-error {{copy constructor must pass its first argument by reference}}
5};
6
7S f();
8
9void g() {
10  S a( f() );
11}
12
13class foo {
14  foo(foo&, int); // expected-note {{previous}}
15  foo(int); // expected-note {{previous}}
16  foo(const foo&); // expected-note {{previous}}
17};
18
19foo::foo(foo&, int = 0) { } // expected-error {{makes this constructor a copy constructor}}
20foo::foo(int = 0) { } // expected-error {{makes this constructor a default constructor}}
21foo::foo(const foo& = 0) { } //expected-error {{makes this constructor a default constructor}}
22
23namespace PR6064 {
24  struct A {
25    A() { }
26    inline A(A&, int); // expected-note {{previous}}
27  };
28
29  A::A(A&, int = 0) { } // expected-error {{makes this constructor a copy constructor}}
30
31  void f() {
32    A const a;
33    A b(a);
34  }
35}
36
37namespace PR10618 {
38  struct A {
39    A(int, int, int); // expected-note {{previous}}
40  };
41  A::A(int a = 0, // expected-error {{makes this constructor a default constructor}}
42       int b = 0,
43       int c = 0) {}
44
45  struct B {
46    B(int);
47    B(const B&, int); // expected-note {{previous}}
48  };
49  B::B(const B& = B(0), // expected-error {{makes this constructor a default constructor}}
50       int = 0) {
51  }
52
53  struct C {
54    C(const C&, int); // expected-note {{previous}}
55  };
56  C::C(const C&,
57       int = 0) { // expected-error {{makes this constructor a copy constructor}}
58  }
59}
60