brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · a769ce4 Raw
100 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fblocks -fobjc-arc -O2 -disable-llvm-passes -o - %s | FileCheck %s2 3typedef const void *CFTypeRef;4typedef const struct __CFString *CFStringRef;5 6@interface NSString7@end8 9CFTypeRef CFCreateSomething(void);10CFStringRef CFCreateString(void);11CFTypeRef CFGetSomething(void);12CFStringRef CFGetString(void);13 14id CreateSomething(void);15NSString *CreateNSString(void);16 17// CHECK-LABEL: define{{.*}} void @bridge_transfer_from_cf18void bridge_transfer_from_cf(int *i) {19  // CHECK: store i32 720  *i = 7;21  // CHECK: call ptr @CFCreateSomething()22  id obj1 = (__bridge_transfer id)CFCreateSomething();23  // CHECK-NOT: retain24  // CHECK: store i32 1125  *i = 11;26  // CHECK: call ptr @CFCreateSomething()27  // CHECK-NOT: retain28  // CHECK: store i32 1329  (void)(__bridge_transfer id)CFCreateSomething(), *i = 13;30  // CHECK: call void @llvm.objc.release31  // CHECK: store i32 1732  *i = 17;33  // CHECK: call void @llvm.objc.release34  // CHECK-NEXT: call void @llvm.lifetime.end35  // CHECK-NEXT: ret void36}37 38// CHECK-LABEL: define{{.*}} void @bridge_from_cf39void bridge_from_cf(int *i) {40  // CHECK: store i32 741  *i = 7;42  // CHECK: call ptr @CFCreateSomething() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]43  id obj1 = (__bridge id)CFCreateSomething();44  // CHECK: store i32 1145  *i = 11;46  // CHECK: call ptr @CFCreateSomething()47  // CHECK-NOT: release48  // CHECK: store i32 1349  (void)(__bridge id)CFCreateSomething(), *i = 13;50  // CHECK: store i32 1751  *i = 17;52  // CHECK: call void @llvm.objc.release53  // CHECK-NEXT: call void @llvm.lifetime.end54  // CHECK-NEXT: ret void55}56 57// CHECK-LABEL: define{{.*}} void @bridge_retained_of_cf58void bridge_retained_of_cf(int *i) {59  *i = 7;60  // CHECK: call ptr @CreateSomething() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]61  CFTypeRef cf1 = (__bridge_retained CFTypeRef)CreateSomething();62  // CHECK: store i32 1163  *i = 11;64  // CHECK: call ptr @CreateSomething() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]65  (__bridge_retained CFTypeRef)CreateSomething(), *i = 13;66  // CHECK: store i32 1367  // CHECK: store i32 1768  *i = 17;69  // CHECK-NEXT: call void @llvm.lifetime.end70  // CHECK-NEXT: ret void71}72 73// CHECK-LABEL: define{{.*}} void @bridge_of_cf74void bridge_of_cf(int *i) {75  // CHECK: store i32 776  *i = 7;77  // CHECK: call void @llvm.lifetime.start78  // CHECK-NEXT: call ptr @CreateSomething()79  CFTypeRef cf1 = (__bridge CFTypeRef)CreateSomething();80  // CHECK-NOT: retain81  // CHECK: store i32 1182  *i = 11;83  // CHECK: call ptr @CreateSomething84  (__bridge CFTypeRef)CreateSomething(), *i = 13;85  // CHECK: store i32 1386  // CHECK-NOT: release87  // CHECK: store i32 1788  *i = 17;89  // CHECK-NEXT: call void @llvm.lifetime.end90  // CHECK-NEXT: ret void91}92 93// CHECK-LABEL: define{{.*}} ptr @bridge_of_paren_expr()94CFStringRef bridge_of_paren_expr(void) {95  // CHECK-NOT: "@llvm.objc"96  CFStringRef r = (__bridge CFStringRef)(CreateNSString());97  r = (__bridge CFStringRef)((NSString *)(CreateNSString()));98  return r;99}100