blob: 7552e7a8a39d5bc63f46a302e0bcae9d2404bdfb [file] [log] [blame]
Dmitri Gribenkoe50e91d2013-02-17 14:59:41 +00001// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o - %s | FileCheck %s
Saleem Abdulrasool961f5702013-02-17 04:03:34 +00002
3@interface NSObject
4+ (id) new;
5- (id) init;
6@end
7
8@interface Base : NSObject @end
9
10// @implementation Base
11// {
12// int dummy;
13// }
14// @end
15
16@interface Derived : Base
17{
18 @public int member;
19}
20@end
21
22@implementation Derived
23- (id) init
24{
25 self = [super init];
26 member = 42;
27 return self;
28}
29@end
30
Dmitri Gribenkoe50e91d2013-02-17 14:59:41 +000031// CHECK: define internal i8* @"\01-[Derived init]"
Saleem Abdulrasool961f5702013-02-17 04:03:34 +000032// CHECK: [[IVAR:%.*]] = load i64* @"OBJC_IVAR_$_Derived.member", !invariant.load
33
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
Dmitri Gribenkoe50e91d2013-02-17 14:59:41 +000043// CHECK: define i8* @variant_load_1(i32 %i)
Saleem Abdulrasool961f5702013-02-17 04:03:34 +000044// CHECK: [[IVAR:%.*]] = load i64* @"OBJC_IVAR_$_Derived.member"{{$}}
45
46@interface Container : Derived @end
47@implementation Container
48- (void *) invariant_load_1
49{
50 return &self->member;
51}
52@end
53
Dmitri Gribenkoe50e91d2013-02-17 14:59:41 +000054// CHECK: define internal i8* @"\01-[Container invariant_load_1]"
Saleem Abdulrasool961f5702013-02-17 04:03:34 +000055// CHECK: [[IVAR:%.*]] = load i64* @"OBJC_IVAR_$_Derived.member", !invariant.load
56