xref: /llvm-project/clang/test/CodeGenObjC/related-result-type.m (revision 9466b49171dc4b21f56a48594fc82b1e52f5358a)
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()
13void test1(void) {
14  // CHECK: {{call.*@objc_msgSend}}
15  // CHECK: {{call.*@objc_msgSend}}
16  // CHECK: {{call.*@objc_msgSend}}
17  NSString *str1 = [[[NSString alloc] init] retain];
18}
19
20// CHECK-LABEL: define {{.*}}void @test2()
21void test2(void) {
22  // CHECK: {{call.*@objc_msgSend}}
23  // CHECK: {{call.*@objc_msgSend}}
24  // CHECK: {{call.*@objc_msgSend}}
25  NSString *str1 = NSString.alloc.init.retain;
26}
27
28@interface Test2 : NSString
29- (id)init;
30@end
31
32@implementation Test2
33// CHECK: define internal {{.*}}ptr @"\01-[Test2 init]"
34- (id)init {
35  // CHECK: {{call.*@objc_msgSendSuper}}
36  return [super init];
37}
38@end
39
40@interface Test3 : NSString
41- (id)init;
42@end
43
44@implementation Test3
45// CHECK: define internal {{.*}}ptr @"\01-[Test3 init]"
46- (id)init {
47  // CHECK: {{call.*@objc_msgSendSuper}}
48  return [super init];
49}
50@end
51