1 // RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++0x -S %s -o %t-64.s
2 // RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s
3 // RUN: %clang_cc1 -triple i386-apple-darwin -std=c++0x -S %s -o %t-32.s
4 // RUN: FileCheck -check-prefix LP32 --input-file=%t-32.s %s
6 extern "C" int printf(...);
7 extern "C" void exit(int);
10 A (const A
&) { printf("A::A(const A&)\n"); }
12 ~A() { printf("A::~A()\n"); }
17 B(const B
& Other
) : A(Other
) { printf("B::B(const B&)\n"); }
18 ~B() { printf("B::~B()\n"); }
23 C(const C
& Other
) : B(Other
) { printf("C::C(const C&)\n"); }
24 ~C() { printf("C::~C()\n"); }
28 operator B
&() {printf("X::operator B&()\n"); return b
; }
29 operator C
&() {printf("X::operator C&()\n"); return c
; }
30 X (const X
&) { printf("X::X(const X&)\n"); }
31 X () { printf("X::X()\n"); }
32 ~X () { printf("X::~X()\n"); }
56 operator Base
&() { exit(1); }
62 Base(const Base
&) { printf("Base::(const Base&)\n"); }
63 Base() { printf("Base::Base()\n"); }
64 operator Derived
&() { exit(1); }
67 struct Derived
: Base
{
74 // CHECK-LP64-NOT: callq __ZN4BasecvR7DerivedEv
75 // CHECK-LP32-NOT: callq L__ZN4BasecvR7DerivedEv
78 // CHECK-LP64: callq __ZN1XcvR1BEv
79 // CHECK-LP64: callq __ZN1AC1ERKS_
81 // CHECK-LP32: calll L__ZN1XcvR1BEv
82 // CHECK-LP32: calll L__ZN1AC1ERKS_