forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // 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* @"OBJC_IVAR_$_Derived.member", !invariant.load
 | |
| 
 | |
| void * variant_load_1(int i) {
 | |
|     void *ptr;
 | |
|     while (i--) {
 | |
|         Derived *d = [Derived new];
 | |
|         ptr = &d->member;
 | |
|     }
 | |
|     return ptr;
 | |
| }
 | |
| 
 | |
| // CHECK: define i8* @variant_load_1(i32 %i)
 | |
| // CHECK: [[IVAR:%.*]] = load i64* @"OBJC_IVAR_$_Derived.member"{{$}}
 | |
| 
 | |
| @interface Container : Derived @end
 | |
| @implementation Container
 | |
| - (void *) invariant_load_1
 | |
| {
 | |
|     return &self->member;
 | |
| }
 | |
| @end
 | |
| 
 | |
| // CHECK: define internal i8* @"\01-[Container invariant_load_1]"
 | |
| // CHECK: [[IVAR:%.*]] = load i64* @"OBJC_IVAR_$_Derived.member", !invariant.load
 | |
| 
 | |
| @interface ForBlock
 | |
| { 
 | |
| @public
 | |
|   id foo; 
 | |
| }
 | |
| @end
 | |
| 
 | |
| // CHECK: define internal i8* @block_block_invoke
 | |
| // CHECK: load i64* @"OBJC_IVAR_$_ForBlock.foo"
 | |
| id (^block)(ForBlock*) = ^(ForBlock* a) {
 | |
|   return a->foo;
 | |
| };
 |