1*f4a2713aSLionel Sambuc// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -fblocks -verify %s 2*f4a2713aSLionel Sambuc 3*f4a2713aSLionel Sambuctypedef const void *CFTypeRef; 4*f4a2713aSLionel Sambuctypedef const struct __CFString *CFStringRef; 5*f4a2713aSLionel Sambuc 6*f4a2713aSLionel Sambuc@interface NSString 7*f4a2713aSLionel Sambuc@end 8*f4a2713aSLionel Sambuc 9*f4a2713aSLionel SambucCFTypeRef CFCreateSomething(); 10*f4a2713aSLionel SambucCFStringRef CFCreateString(); 11*f4a2713aSLionel SambucCFTypeRef CFGetSomething(); 12*f4a2713aSLionel SambucCFStringRef CFGetString(); 13*f4a2713aSLionel Sambuc 14*f4a2713aSLionel Sambucid CreateSomething(); 15*f4a2713aSLionel SambucNSString *CreateNSString(); 16*f4a2713aSLionel Sambuc 17*f4a2713aSLionel Sambuctemplate<typename IdType, typename StringType, typename IntPtrType> 18*f4a2713aSLionel Sambucvoid from_cf() { 19*f4a2713aSLionel Sambuc id obj1 = (__bridge_transfer IdType)CFCreateSomething(); 20*f4a2713aSLionel Sambuc id obj2 = (__bridge_transfer StringType)CFCreateString(); 21*f4a2713aSLionel Sambuc (__bridge IntPtrType)CFCreateSomething(); // expected-error{{incompatible types casting 'CFTypeRef' (aka 'const void *') to 'int *' with a __bridge cast}} 22*f4a2713aSLionel Sambuc id obj3 = (__bridge IdType)CFGetSomething(); 23*f4a2713aSLionel Sambuc id obj4 = (__bridge StringType)CFGetString(); 24*f4a2713aSLionel Sambuc} 25*f4a2713aSLionel Sambuc 26*f4a2713aSLionel Sambuctemplate void from_cf<id, NSString*, int*>(); // expected-note{{in instantiation of function template specialization}} 27*f4a2713aSLionel Sambuc 28*f4a2713aSLionel Sambuctemplate<typename IdType, typename StringType> 29*f4a2713aSLionel Sambucvoid to_cf(id obj) { 30*f4a2713aSLionel Sambuc CFTypeRef cf1 = (__bridge_retained IdType)CreateSomething(); 31*f4a2713aSLionel Sambuc CFStringRef cf2 = (__bridge_retained StringType)CreateNSString(); 32*f4a2713aSLionel Sambuc CFTypeRef cf3 = (__bridge IdType)CreateSomething(); 33*f4a2713aSLionel Sambuc CFStringRef cf4 = (__bridge StringType)CreateNSString(); 34*f4a2713aSLionel Sambuc} 35*f4a2713aSLionel Sambuc 36*f4a2713aSLionel Sambuctemplate void to_cf<CFTypeRef, CFStringRef>(id); 37