]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGenObjC/related-result-type.m
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
[FreeBSD/FreeBSD.git] / test / CodeGenObjC / related-result-type.m
1 // RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
2
3 @interface NSObject
4 + (id)alloc;
5 - (id)init;
6 - (id)retain;
7 @end
8
9 @interface NSString : NSObject
10 @end
11
12 // CHECK-LABEL: define void @test1()
13 void test1() {
14   // CHECK: {{call.*@objc_msgSend}}
15   // CHECK: {{call.*@objc_msgSend}}
16   // CHECK: {{call.*@objc_msgSend}}
17   // CHECK: bitcast i8*
18   NSString *str1 = [[[NSString alloc] init] retain];
19 }
20
21 // CHECK-LABEL: define void @test2()
22 void test2() {
23   // CHECK: {{call.*@objc_msgSend}}
24   // CHECK: {{call.*@objc_msgSend}}
25   // CHECK: {{call.*@objc_msgSend}}
26   // CHECK: bitcast i8*
27   NSString *str1 = NSString.alloc.init.retain;
28 }
29
30 @interface Test2 : NSString
31 - (id)init;
32 @end
33
34 @implementation Test2
35 // CHECK: define internal i8* @"\01-[Test2 init]"
36 - (id)init {
37   // CHECK: {{call.*@objc_msgSendSuper}}
38   // CHECK-NEXT: bitcast i8*
39   return [super init];
40 }
41 @end
42
43 @interface Test3 : NSString
44 - (id)init;
45 @end
46
47 @implementation Test3
48 // CHECK: define internal i8* @"\01-[Test3 init]"
49 - (id)init {
50   // CHECK: {{call.*@objc_msgSendSuper}}
51   // CHECK-NEXT: bitcast i8*
52   return [super init];
53 }
54 @end