// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -fobjc-fragile-abi -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-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-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-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]; }