| // 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]; |
| } |