brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · fdc34dd Raw
89 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -fblocks -verify %s2// RUN: not %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -fblocks -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s3 4typedef const void *CFTypeRef;5CFTypeRef CFBridgingRetain(id X);6id CFBridgingRelease(CFTypeRef);7typedef const struct __CFString *CFStringRef;8 9@interface NSString10@end11 12CFTypeRef CFCreateSomething(void);13CFStringRef CFCreateString(void);14CFTypeRef CFGetSomething(void);15CFStringRef CFGetString(void);16 17id CreateSomething(void);18NSString *CreateNSString(void);19 20void from_cf(void) {21  id obj1 = (__bridge_transfer id)CFCreateSomething();22  id obj2 = (__bridge_transfer NSString*)CFCreateString();23  (__bridge int*)CFCreateSomething(); // expected-error{{incompatible types casting 'CFTypeRef' (aka 'const void *') to 'int *' with a __bridge cast}}24  id obj3 = (__bridge id)CFGetSomething();25  id obj4 = (__bridge NSString*)CFGetString();26}27 28void to_cf(id obj) {29  CFTypeRef cf1 = (__bridge_retained CFTypeRef)CreateSomething();30  CFStringRef cf2 = (__bridge_retained CFStringRef)CreateNSString();31  CFTypeRef cf3 = (__bridge CFTypeRef)CreateSomething();32  CFStringRef cf4 = (__bridge CFStringRef)CreateNSString();33 34  CFTypeRef cf5 = (__bridge_retain CFTypeRef)CreateSomething(); // expected-error {{unknown cast annotation __bridge_retain; did you mean __bridge_retained?}}35  // CHECK: fix-it:"{{.*}}":{34:20-34:35}:"__bridge_retained"36}37 38CFTypeRef fixits(void) {39  id obj1 = (id)CFCreateSomething(); // expected-error{{cast of C pointer type 'CFTypeRef' (aka 'const void *') to Objective-C pointer type 'id' requires a bridged cast}} \40  // expected-note{{use __bridge to convert directly (no change in ownership)}} expected-note{{use CFBridgingRelease call to transfer ownership of a +1 'CFTypeRef' (aka 'const void *') into ARC}}41  // CHECK: fix-it:"{{.*}}":{39:17-39:17}:"CFBridgingRelease("42  // CHECK: fix-it:"{{.*}}":{39:36-39:36}:")"43 44  CFTypeRef cf1 = (CFTypeRef)CreateSomething(); // expected-error{{cast of Objective-C pointer type 'id' to C pointer type 'CFTypeRef' (aka 'const void *') requires a bridged cast}} \45  // expected-note{{use __bridge to convert directly (no change in ownership)}} \46  // expected-note{{use CFBridgingRetain call to make an ARC object available as a +1 'CFTypeRef' (aka 'const void *')}}47  // CHECK: fix-it:"{{.*}}":{44:30-44:30}:"CFBridgingRetain("48  // CHECK: fix-it:"{{.*}}":{44:47-44:47}:")"49 50  return (obj1); // expected-error{{implicit conversion of Objective-C pointer type 'id' to C pointer type 'CFTypeRef' (aka 'const void *') requires a bridged cast}} \51  // expected-note{{use __bridge to convert directly (no change in ownership)}} \52  // expected-note{{use CFBridgingRetain call to make an ARC object available as a +1 'CFTypeRef' (aka 'const void *')}}53  // CHECK: fix-it:"{{.*}}":{50:10-50:10}:"(__bridge CFTypeRef)"54  // CHECK: fix-it:"{{.*}}":{50:10-50:10}:"CFBridgingRetain"55}56 57CFTypeRef fixitsWithSpace(id obj) {58  return(obj); // expected-error{{implicit conversion of Objective-C pointer type 'id' to C pointer type 'CFTypeRef' (aka 'const void *') requires a bridged cast}} \59  // expected-note{{use __bridge to convert directly (no change in ownership)}} \60  // expected-note{{use CFBridgingRetain call to make an ARC object available as a +1 'CFTypeRef' (aka 'const void *')}}61  // CHECK: fix-it:"{{.*}}":{58:9-58:9}:"(__bridge CFTypeRef)"62  // CHECK: fix-it:"{{.*}}":{58:9-58:9}:" CFBridgingRetain"63}64 65typedef const struct __attribute__((objc_bridge(id))) __CFAnnotatedObject *CFAnnotatedObjectRef;66CFAnnotatedObjectRef CFGetAnnotated(void);67 68void testObjCBridgeId(void) {69  id obj;70  obj = (__bridge id)CFGetAnnotated();71  obj = (__bridge NSString*)CFGetAnnotated();72  obj = (__bridge_transfer id)CFGetAnnotated();73  obj = (__bridge_transfer NSString*)CFGetAnnotated();74 75  CFAnnotatedObjectRef ref;76  ref = (__bridge CFAnnotatedObjectRef) CreateSomething();77  ref = (__bridge CFAnnotatedObjectRef) CreateNSString();78  ref = (__bridge_retained CFAnnotatedObjectRef) CreateSomething();79  ref = (__bridge_retained CFAnnotatedObjectRef) CreateNSString();80}81 82typedef const struct __attribute__((objc_bridge(UIFont))) __CTFont * CTFontRef;83 84id testObjCBridgeUnknownTypeToId(CTFontRef font) {85  id x = (__bridge id)font;86  return x;87}88 89