copy-constructor-elim.cpp revision 343a3cf57ee950b024bade8b6b0a2b51663f43cd
1// RUN: clang-cc -emit-llvm -o %t %s &&
2// RUN: grep "_ZN1CC1ERK1C" %t | count 0 &&
3// RUN: grep "_ZN1SC1ERK1S" %t | count 0 &&
4// RUN: true
5
6extern "C" int printf(...);
7
8
9struct C {
10	C() : iC(6) {printf("C()\n"); }
11	C(const C& c) { printf("C(const C& c)\n"); }
12	int iC;
13};
14
15C foo() {
16  return C();
17};
18
19class X { // ...
20public:
21	X(int) {}
22	X(const X&, int i = 1, int j = 2, C c = foo()) {
23		printf("X(const X&, %d, %d, %d)\n", i, j, c.iC);
24	}
25};
26
27
28struct S {
29  S();
30};
31
32S::S() { printf("S()\n"); }
33
34void Call(S) {};
35
36int main()
37{
38	X a(1);
39	X b(a, 2);
40	X c = b;
41	X d(a, 5, 6);
42        S s;
43        Call(s);
44}
45