1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -O0 -emit-llvm %s -o - | FileCheck %s 2// rdar://16095748 3 4@interface MyNSObject 5@end 6 7@interface SampleClass : MyNSObject { 8 @public 9 int _value; 10} 11+ (SampleClass*) new; 12@end 13 14@interface AppDelegate : MyNSObject 15@end 16 17extern void foo(int); 18 19@implementation AppDelegate 20- (void)application 21{ 22 // Create set of objects in loop 23 for(int i = 0; i < 2; i++) { 24 SampleClass *sample = [SampleClass new]; 25 foo (sample->_value); 26 } 27} 28@end 29// CHECK: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_SampleClass._value", align 8 30// CHECK: [[THREE:%.*]] = bitcast [[ONE:%.*]]* [[CALL:%.*]] to i8* 31// CHECK: [[ADDPTR:%.*]] = getelementptr inbounds i8, i8* [[THREE]], i64 [[IVAR]] 32// CHECK: [[FOUR:%.*]] = bitcast i8* [[ADDPTR]] to i32* 33// CHECK: [[FIVE:%.*]] = load i32, i32* [[FOUR]], align 4 34// CHECK: call void @foo(i32 [[FIVE]]) 35 36@implementation SampleClass 37+ (SampleClass*) new { return 0; } 38- (void) SampleClassApplication 39{ 40 // Create set of objects in loop 41 for(int i = 0; i < 2; i++) { 42 SampleClass *sample = [SampleClass new]; 43 foo (sample->_value); 44 } 45} 46@end 47// CHECK: [[ZERO:%.*]] = load i8*, i8** @OBJC_SELECTOR_REFERENCES_, align 8, !invariant.load 48// CHECK: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_SampleClass._value", align 8, !invariant.load 49 50@interface Sample : SampleClass @end 51 52@implementation Sample 53- (void) SampleApplication 54{ 55 // Create set of objects in loop 56 for(int i = 0; i < 2; i++) { 57 SampleClass *sample = [SampleClass new]; 58 foo (sample->_value); 59 } 60} 61@end 62// CHECK: [[ZERO:%.*]] = load i8*, i8** @OBJC_SELECTOR_REFERENCES_, align 8, !invariant.load 63// CHECK: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_SampleClass._value", align 8, !invariant.load 64 65