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