1*67e74705SXin Li// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-10.7 -emit-llvm -o - %s | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li// Properly instantiate a non-dependent message expression which 4*67e74705SXin Li// requires a contextual conversion to ObjC pointer type. 5*67e74705SXin Li// <rdar://13305374> 6*67e74705SXin Li@interface Test0 7*67e74705SXin Li- (void) foo; 8*67e74705SXin Li@end 9*67e74705SXin Linamespace test0 { 10*67e74705SXin Li struct A { 11*67e74705SXin Li operator Test0*(); 12*67e74705SXin Li }; 13*67e74705SXin Li template <class T> void foo() { 14*67e74705SXin Li A a; 15*67e74705SXin Li [a foo]; 16*67e74705SXin Li } 17*67e74705SXin Li template void foo<int>(); 18*67e74705SXin Li // CHECK-LABEL: define weak_odr void @_ZN5test03fooIiEEvv() 19*67e74705SXin Li // CHECK: [[T0:%.*]] = call [[TEST0:%.*]]* @_ZN5test01AcvP5Test0Ev( 20*67e74705SXin Li // CHECK-NEXT: [[T1:%.*]] = load i8*, i8** 21*67e74705SXin Li // CHECK-NEXT: [[T2:%.*]] = bitcast [[TEST0]]* [[T0]] to i8* 22*67e74705SXin Li // CHECK-NEXT: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*)*)(i8* [[T2]], i8* [[T1]]) 23*67e74705SXin Li // CHECK-NEXT: ret void 24*67e74705SXin Li} 25