1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s \ 2*67e74705SXin Li// RUN: -fobjc-dispatch-method=legacy | \ 3*67e74705SXin Li// RUN: FileCheck -check-prefix CHECK-FRAGILE_LEGACY %s 4*67e74705SXin Li// 5*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-llvm -o - %s \ 6*67e74705SXin Li// RUN: -fobjc-dispatch-method=legacy | \ 7*67e74705SXin Li// RUN: FileCheck -check-prefix CHECK-NONFRAGILE_LEGACY %s 8*67e74705SXin Li// 9*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-llvm -o - %s \ 10*67e74705SXin Li// RUN: -fobjc-dispatch-method=non-legacy | \ 11*67e74705SXin Li// RUN: FileCheck -check-prefix CHECK-NONFRAGILE_NONLEGACY %s 12*67e74705SXin Li// 13*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-llvm -o - %s \ 14*67e74705SXin Li// RUN: -fobjc-dispatch-method=mixed | \ 15*67e74705SXin Li// RUN: FileCheck -check-prefix CHECK-NONFRAGILE_MIXED %s 16*67e74705SXin Li// 17*67e74705SXin Li// <rdar://problem/7866951> 18*67e74705SXin Li 19*67e74705SXin Li// There are basically four ways that we end up doing message dispatch for the 20*67e74705SXin Li// NeXT runtime. They are: 21*67e74705SXin Li// (1) fragile ABI, legacy dispatch 22*67e74705SXin Li// (2) non-fragile ABI, legacy dispatch 23*67e74705SXin Li// (2) non-fragile ABI, non-legacy dispatch 24*67e74705SXin Li// (2) non-fragile ABI, mixed dispatch 25*67e74705SXin Li// 26*67e74705SXin Li// Note that fragile ABI and non-fragile ABI legacy dispatch are not the same, 27*67e74705SXin Li// they use some different API calls (objc_msgSendSuper vs objc_msgSendSuper2). 28*67e74705SXin Li 29*67e74705SXin Li// CHECK-FRAGILE_LEGACY: ModuleID 30*67e74705SXin Li// CHECK-FRAGILE_LEGACY-NOT: declare i8* @objc_msgSendSuper2_fixup( 31*67e74705SXin Li// CHECK-FRAGILE_LEGACY-NOT: declare i8* @objc_msgSend_fixup( 32*67e74705SXin Li// CHECK-FRAGILE_LEGACY: declare i8* @objc_msgSendSuper( 33*67e74705SXin Li// CHECK-FRAGILE_LEGACY: declare i8* @objc_msgSend( 34*67e74705SXin Li 35*67e74705SXin Li// CHECK-NONFRAGILE_LEGACY: ModuleID 36*67e74705SXin Li// CHECK-NONFRAGILE_LEGACY-NOT: declare i8* @objc_msgSendSuper2_fixup( 37*67e74705SXin Li// CHECK-NONFRAGILE_LEGACY-NOT: declare i8* @objc_msgSend_fixup( 38*67e74705SXin Li// CHECK-NONFRAGILE_LEGACY: declare i8* @objc_msgSendSuper2( 39*67e74705SXin Li// CHECK-NONFRAGILE_LEGACY: declare i8* @objc_msgSend( 40*67e74705SXin Li 41*67e74705SXin Li// CHECK-NONFRAGILE_NONLEGACY: ModuleID 42*67e74705SXin Li// CHECK-NONFRAGILE_NONLEGACY: declare i8* @objc_msgSendSuper2_fixup( 43*67e74705SXin Li// CHECK-NONFRAGILE_NONLEGACY: declare i8* @objc_msgSend_fixup( 44*67e74705SXin Li 45*67e74705SXin Li// CHECK-NONFRAGILE_MIXED: declare i8* @objc_msgSendSuper2_fixup( 46*67e74705SXin Li// CHECK-NONFRAGILE_MIXED: declare i8* @objc_msgSendSuper2( 47*67e74705SXin Li// CHECK-NONFRAGILE_MIXED: declare i8* @objc_msgSend_fixup( 48*67e74705SXin Li// CHECK-NONFRAGILE_MIXED: declare i8* @objc_msgSend( 49*67e74705SXin Li 50*67e74705SXin Li@interface NSObject 51*67e74705SXin Li+ (id)alloc; 52*67e74705SXin Li- (id)init; 53*67e74705SXin Li@end 54*67e74705SXin Li 55*67e74705SXin Li@interface I0 : NSObject 56*67e74705SXin Li-(void) im0; 57*67e74705SXin Li@end 58*67e74705SXin Li 59*67e74705SXin Li@implementation I0 60*67e74705SXin Li+(id) alloc { 61*67e74705SXin Li return [super alloc]; 62*67e74705SXin Li} 63*67e74705SXin Li-(id) init { 64*67e74705SXin Li [super init]; 65*67e74705SXin Li return self; 66*67e74705SXin Li} 67*67e74705SXin Li-(void) im0 {} 68*67e74705SXin Li@end 69*67e74705SXin Li 70*67e74705SXin Livoid f0(I0 *a) { 71*67e74705SXin Li [I0 alloc]; 72*67e74705SXin Li [a im0]; 73*67e74705SXin Li} 74