derived-to-base-conv.cpp revision 93034ca3d025e948ddfcdd78868957efc70741a7
1// RUN: clang-cc -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-cc -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 && 5// RUN: true 6 7extern "C" int printf(...); 8 9struct A { 10 A (const A&) { printf("A::A(const A&)\n"); } 11 A() {}; 12}; 13 14struct B : public A { 15 B() {}; 16}; 17 18struct C : public B { 19 C() {}; 20}; 21 22struct X { 23 operator B&() {printf("X::operator B&()\n"); return b; } 24 operator C&() {printf("X::operator C&()\n"); return c; } 25 X (const X&) { printf("X::X(const X&)\n"); } 26 X () { printf("X::X()\n"); } 27 B b; 28 C c; 29}; 30 31void f(A) { 32 printf("f(A)\n"); 33} 34 35 36void func(X x) 37{ 38 f (x); 39} 40 41int main() 42{ 43 X x; 44 func(x); 45} 46 47// CHECK-LP64: call __ZN1XcvR1BEv 48// CHECK-LP64: call __ZN1AC1ERKS_ 49 50// CHECK-LP32: call L__ZN1XcvR1BEv 51// CHECK-LP32: call L__ZN1AC1ERKS_ 52