69 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin -fblocks -emit-llvm -o - %s | FileCheck %s2 3@interface NSObject4+ (id) new;5- (id) init;6@end7 8@interface Base : NSObject @end9 10// @implementation Base11// {12// int dummy;13// }14// @end15 16@interface Derived : Base17{18 @public int member;19}20@end21 22@implementation Derived23- (id) init24{25 self = [super init];26 member = 42;27 return self;28}29@end30 31// CHECK: define internal ptr @"\01-[Derived init]"32// CHECK: [[IVAR:%.*]] = load i64, ptr @"OBJC_IVAR_$_Derived.member", align 8, !invariant.load33 34void * variant_load_1(int i) {35 void *ptr;36 while (i--) {37 Derived *d = [Derived new];38 ptr = &d->member;39 }40 return ptr;41}42 43// CHECK-LABEL: define{{.*}} ptr @variant_load_1(i32 noundef %i)44// CHECK: [[IVAR:%.*]] = load i64, ptr @"OBJC_IVAR_$_Derived.member", align 8{{$}}45 46@interface Container : Derived @end47@implementation Container48- (void *) invariant_load_149{50 return &self->member;51}52@end53 54// CHECK-LABEL: define internal ptr @"\01-[Container invariant_load_1]"55// CHECK: [[IVAR:%.*]] = load i64, ptr @"OBJC_IVAR_$_Derived.member", align 8, !invariant.load56 57@interface ForBlock58{ 59@public60 id foo; 61}62@end63 64// CHECK-LABEL: define internal ptr @block_block_invoke65// CHECK: load i64, ptr @"OBJC_IVAR_$_ForBlock.foo"66id (^block)(ForBlock*) = ^(ForBlock* a) {67 return a->foo;68};69