brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · d4cdcb9 Raw
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