blob: 6ffed9bf222a0149ca1813db1155c0140c894b90 [file] [log] [blame]
Richard Smithb8abff62012-11-28 03:45:24 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Fariborz Jahanian52ab92b2009-08-06 17:22:51 +00002
Douglas Gregor90f93822009-12-22 22:17:25 +00003struct S {
4 S (S); // expected-error {{copy constructor must pass its first argument by reference}}
Fariborz Jahanian52ab92b2009-08-06 17:22:51 +00005};
6
7S f();
8
9void g() {
Douglas Gregor90f93822009-12-22 22:17:25 +000010 S a( f() );
Fariborz Jahanian52ab92b2009-08-06 17:22:51 +000011}
Douglas Gregorfd476482009-11-13 23:59:09 +000012
Richard Smithb8abff62012-11-28 03:45:24 +000013class 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
Douglas Gregor2366cd52010-03-02 18:48:07 +000023namespace PR6064 {
24 struct A {
25 A() { }
Richard Smithb8abff62012-11-28 03:45:24 +000026 inline A(A&, int); // expected-note {{previous}}
Douglas Gregor2366cd52010-03-02 18:48:07 +000027 };
28
Richard Smithb8abff62012-11-28 03:45:24 +000029 A::A(A&, int = 0) { } // expected-error {{makes this constructor a copy constructor}}
Douglas Gregor2366cd52010-03-02 18:48:07 +000030
31 void f() {
32 A const a;
33 A b(a);
34 }
35}
Richard Smithb8abff62012-11-28 03:45:24 +000036
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}