1 // RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++11 -emit-llvm %s -o - | \
2 // RUN: FileCheck -check-prefix CHECK-LP64 %s
3 // RUN: %clang_cc1 -triple i386-apple-darwin -std=c++11 -emit-llvm %s -o - | \
4 // RUN: FileCheck -check-prefix CHECK-LP32 %s
5 // 13.3.3.2 Ranking implicit conversion sequences
7 extern "C" int printf(...);
11 bool foo(int* arg
) const;
14 bool A::foo(int* arg
) const {
15 printf("A::foo(%d)\n", *arg
);
20 void bf() { printf("B::bf called\n"); }
23 struct C
: public B
{ };
25 // conversion of B::* to C::* is better than conversion of A::* to C::*
26 typedef void (A::*pmfa
)();
27 typedef void (B::*pmfb
)();
28 typedef void (C::*pmfc
)();
49 bool (A::*pmf
)(int*) const;
51 B1(int i
) : pmf(&A::foo
), im(i
) {
52 ((A
*)this->*pmf
)(&im
);
66 // CHECK-LP64: call { i64, i64 } @_ZN1XcvM1BFvvEEv
67 // CHECK-LP64: call void @_Z1gM1CFvvE
69 // CHECK-LP32: call i64 @_ZN1XcvM1BFvvEEv
70 // CHECK-LP32: call void @_Z1gM1CFvvE