[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / clang / test / CodeGenObjC / ivar-invariant.m
blobd4cdcb97b78fc095c34a5ae4fb00859df7d8ef93
1 // RUN: %clang_cc1 -triple x86_64-apple-darwin -fblocks -emit-llvm -o - %s | FileCheck %s
3 @interface NSObject
4 + (id) new;
5 - (id) init;
6 @end
8 @interface Base : NSObject @end
10 // @implementation Base
11 // {
12 //     int dummy;
13 // }
14 // @end
16 @interface Derived : Base
18     @public int member;
20 @end
22 @implementation Derived
23 - (id) init
25     self = [super init];
26     member = 42;
27     return self;
29 @end
31 // CHECK: define internal ptr @"\01-[Derived init]"
32 // CHECK: [[IVAR:%.*]] = load i64, ptr @"OBJC_IVAR_$_Derived.member", align 8, !invariant.load
34 void * variant_load_1(int i) {
35     void *ptr;
36     while (i--) {
37         Derived *d = [Derived new];
38         ptr = &d->member;
39     }
40     return ptr;
43 // CHECK-LABEL: define{{.*}} ptr @variant_load_1(i32 noundef %i)
44 // CHECK: [[IVAR:%.*]] = load i64, ptr @"OBJC_IVAR_$_Derived.member", align 8{{$}}
46 @interface Container : Derived @end
47 @implementation Container
48 - (void *) invariant_load_1
50     return &self->member;
52 @end
54 // CHECK-LABEL: define internal ptr @"\01-[Container invariant_load_1]"
55 // CHECK: [[IVAR:%.*]] = load i64, ptr @"OBJC_IVAR_$_Derived.member", align 8, !invariant.load
57 @interface ForBlock
58
59 @public
60   id foo; 
62 @end
64 // CHECK-LABEL: define internal ptr @block_block_invoke
65 // CHECK: load i64, ptr @"OBJC_IVAR_$_ForBlock.foo"
66 id (^block)(ForBlock*) = ^(ForBlock* a) {
67   return a->foo;