| // RUN: %clang_cc1 -triple x86_64-apple-darwin -fblocks -emit-llvm -o - %s | FileCheck %s | 
 |  | 
 | @interface NSObject | 
 | + (id) new; | 
 | - (id) init; | 
 | @end | 
 |  | 
 | @interface Base : NSObject @end | 
 |  | 
 | // @implementation Base | 
 | // { | 
 | //     int dummy; | 
 | // } | 
 | // @end | 
 |  | 
 | @interface Derived : Base | 
 | { | 
 |     @public int member; | 
 | } | 
 | @end | 
 |  | 
 | @implementation Derived | 
 | - (id) init | 
 | { | 
 |     self = [super init]; | 
 |     member = 42; | 
 |     return self; | 
 | } | 
 | @end | 
 |  | 
 | // CHECK: define internal i8* @"\01-[Derived init]" | 
 | // CHECK: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_Derived.member", align 8, !invariant.load | 
 |  | 
 | void * variant_load_1(int i) { | 
 |     void *ptr; | 
 |     while (i--) { | 
 |         Derived *d = [Derived new]; | 
 |         ptr = &d->member; | 
 |     } | 
 |     return ptr; | 
 | } | 
 |  | 
 | // CHECK-LABEL: define i8* @variant_load_1(i32 %i) | 
 | // CHECK: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_Derived.member", align 8{{$}} | 
 |  | 
 | @interface Container : Derived @end | 
 | @implementation Container | 
 | - (void *) invariant_load_1 | 
 | { | 
 |     return &self->member; | 
 | } | 
 | @end | 
 |  | 
 | // CHECK-LABEL: define internal i8* @"\01-[Container invariant_load_1]" | 
 | // CHECK: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_Derived.member", align 8, !invariant.load | 
 |  | 
 | @interface ForBlock | 
 | {  | 
 | @public | 
 |   id foo;  | 
 | } | 
 | @end | 
 |  | 
 | // CHECK-LABEL: define internal i8* @block_block_invoke | 
 | // CHECK: load i64, i64* @"OBJC_IVAR_$_ForBlock.foo" | 
 | id (^block)(ForBlock*) = ^(ForBlock* a) { | 
 |   return a->foo; | 
 | }; |