forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-llvm -o - %s \
 | |
| // RUN:   -fobjc-dispatch-method=legacy | \
 | |
| // RUN:   FileCheck -check-prefix CHECK-FRAGILE_LEGACY %s
 | |
| //
 | |
| // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-llvm -o - %s    \
 | |
| // RUN:   -fobjc-nonfragile-abi -fobjc-dispatch-method=legacy | \
 | |
| // RUN:   FileCheck -check-prefix CHECK-NONFRAGILE_LEGACY %s
 | |
| //
 | |
| // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-llvm -o - %s    \
 | |
| // RUN:   -fobjc-nonfragile-abi -fobjc-dispatch-method=non-legacy | \
 | |
| // RUN:   FileCheck -check-prefix CHECK-NONFRAGILE_NONLEGACY %s
 | |
| //
 | |
| // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-llvm -o - %s    \
 | |
| // RUN:   -fobjc-nonfragile-abi -fobjc-dispatch-method=mixed | \
 | |
| // RUN:   FileCheck -check-prefix CHECK-NONFRAGILE_MIXED %s
 | |
| //
 | |
| // <rdar://problem/7866951>
 | |
| 
 | |
| // There are basically four ways that we end up doing message dispatch for the
 | |
| // NeXT runtime. They are:
 | |
| //  (1) fragile ABI, legacy dispatch
 | |
| //  (2) non-fragile ABI, legacy dispatch
 | |
| //  (2) non-fragile ABI, non-legacy dispatch
 | |
| //  (2) non-fragile ABI, mixed dispatch
 | |
| //
 | |
| // Note that fragile ABI and non-fragile ABI legacy dispatch are not the same,
 | |
| // they use some different API calls (objc_msgSendSuper vs objc_msgSendSuper2).
 | |
| 
 | |
| // CHECK-FRAGILE_LEGACY: ModuleID
 | |
| // CHECK-FRAGILE_LEGACY-NOT: declare i8* @objc_msgSendSuper2_fixup(
 | |
| // CHECK-FRAGILE_LEGACY-NOT: declare i8* @objc_msgSend_fixup(
 | |
| // CHECK-FRAGILE_LEGACY: declare i8* @objc_msgSendSuper(
 | |
| // CHECK-FRAGILE_LEGACY: declare i8* @objc_msgSend(
 | |
| 
 | |
| // CHECK-NONFRAGILE_LEGACY: ModuleID
 | |
| // CHECK-NONFRAGILE_LEGACY-NOT: declare i8* @objc_msgSendSuper2_fixup(
 | |
| // CHECK-NONFRAGILE_LEGACY-NOT: declare i8* @objc_msgSend_fixup(
 | |
| // CHECK-NONFRAGILE_LEGACY: declare i8* @objc_msgSendSuper2(
 | |
| // CHECK-NONFRAGILE_LEGACY: declare i8* @objc_msgSend(
 | |
| 
 | |
| // CHECK-NONFRAGILE_NONLEGACY: ModuleID
 | |
| // CHECK-NONFRAGILE_NONLEGACY: declare i8* @objc_msgSendSuper2_fixup(
 | |
| // CHECK-NONFRAGILE_NONLEGACY: declare i8* @objc_msgSend_fixup(
 | |
| 
 | |
| // CHECK-NONFRAGILE_MIXED: declare i8* @objc_msgSendSuper2_fixup(
 | |
| // CHECK-NONFRAGILE_MIXED: declare i8* @objc_msgSendSuper2(
 | |
| // CHECK-NONFRAGILE_MIXED: declare i8* @objc_msgSend_fixup(
 | |
| // CHECK-NONFRAGILE_MIXED: declare i8* @objc_msgSend(
 | |
| 
 | |
| @interface NSObject
 | |
| + (id)alloc;
 | |
| - (id)init;
 | |
| @end
 | |
| 
 | |
| @interface I0 : NSObject
 | |
| -(void) im0;
 | |
| @end
 | |
| 
 | |
| @implementation I0
 | |
| +(id) alloc {
 | |
|   return [super alloc];
 | |
| }
 | |
| -(id) init {
 | |
|  [super init];
 | |
|  return self;
 | |
| }
 | |
| -(void) im0 {}
 | |
| @end
 | |
| 
 | |
| void f0(I0 *a) {
 | |
|   [I0 alloc];
 | |
|   [a im0];
 | |
| }
 |