xref: /minix3/external/bsd/llvm/dist/clang/test/SemaObjCXX/arc-bridged-cast.mm (revision f4a2713ac843a11c696ec80c0a5e3e5d80b4d338)
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