52 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-runtime-has-weak -fblocks -fobjc-arc -o - %s | FileCheck %s2 3@interface SuperClass4@end5 6@interface WeakPropertyTest : SuperClass {7 __weak id PROP;8}9@property () __weak id PROP;10@end11 12@implementation WeakPropertyTest13@synthesize PROP;14@end15 16// CHECK: define internal ptr @"\01-[WeakPropertyTest PROP]"17// CHECK: [[SELF:%.*]] = alloca ptr,18// CHECK-NEXT: [[CMD:%.*]] = alloca ptr,19// CHECK-NEXT: store ptr {{%.*}}, ptr [[SELF]]20// CHECK-NEXT: store ptr {{%.*}}, ptr [[CMD]]21// CHECK-NEXT: [[T0:%.*]] = load ptr, ptr [[SELF]]22// CHECK-NEXT: [[T1:%.*]] = load i64, ptr @"OBJC_IVAR_$_WeakPropertyTest.PROP"23// CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds i8, ptr [[T0]], i64 [[T1]]24// CHECK-NEXT: [[T5:%.*]] = call ptr @llvm.objc.loadWeakRetained(ptr [[T3]])25// CHECK-NEXT: [[T6:%.*]] = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr [[T5]])26// CHECK-NEXT: ret ptr [[T6]]27 28// CHECK: define internal void @"\01-[WeakPropertyTest setPROP:]"29// CHECK: [[SELF:%.*]] = alloca ptr,30// CHECK-NEXT: [[CMD:%.*]] = alloca ptr,31// CHECK-NEXT: [[PROP:%.*]] = alloca ptr,32// CHECK-NEXT: store ptr {{%.*}}, ptr [[SELF]]33// CHECK-NEXT: store ptr {{%.*}}, ptr [[CMD]]34// CHECK-NEXT: store ptr {{%.*}}, ptr [[PROP]]35// CHECK-NEXT: [[V:%.*]] = load ptr, ptr [[PROP]]36// CHECK-NEXT: [[T0:%.*]] = load ptr, ptr [[SELF]]37// CHECK-NEXT: [[T1:%.*]] = load i64, ptr @"OBJC_IVAR_$_WeakPropertyTest.PROP"38// CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds i8, ptr [[T0]], i64 [[T1]]39// CHECK-NEXT: call ptr @llvm.objc.storeWeak(ptr [[T3]], ptr [[V]])40// CHECK-NEXT: ret void41 42// CHECK: define internal void @"\01-[WeakPropertyTest .cxx_destruct]"43// CHECK: [[SELF:%.*]] = alloca ptr,44// CHECK-NEXT: [[CMD:%.*]] = alloca ptr,45// CHECK-NEXT: store ptr {{%.*}}, ptr [[SELF]]46// CHECK-NEXT: store ptr {{%.*}}, ptr [[CMD]]47// CHECK-NEXT: [[T0:%.*]] = load ptr, ptr [[SELF]]48// CHECK-NEXT: [[T1:%.*]] = load i64, ptr @"OBJC_IVAR_$_WeakPropertyTest.PROP"49// CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds i8, ptr [[T0]], i64 [[T1]]50// CHECK-NEXT: call void @llvm.objc.destroyWeak(ptr [[T3]])51// CHECK-NEXT: ret void52