summaryrefslogtreecommitdiffstats
path: root/test/CodeGenObjC/related-result-type.m
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGenObjC/related-result-type.m')
-rw-r--r--test/CodeGenObjC/related-result-type.m54
1 files changed, 54 insertions, 0 deletions
diff --git a/test/CodeGenObjC/related-result-type.m b/test/CodeGenObjC/related-result-type.m
new file mode 100644
index 0000000..ef38661
--- /dev/null
+++ b/test/CodeGenObjC/related-result-type.m
@@ -0,0 +1,54 @@
+// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
+
+@interface NSObject
++ (id)alloc;
+- (id)init;
+- (id)retain;
+@end
+
+@interface NSString : NSObject
+@end
+
+// CHECK: define void @test1()
+void test1() {
+ // CHECK: {{call.*@objc_msgSend}}
+ // CHECK: {{call.*@objc_msgSend}}
+ // CHECK: {{call.*@objc_msgSend}}
+ // CHECK: bitcast i8*
+ NSString *str1 = [[[NSString alloc] init] retain];
+}
+
+// CHECK: define void @test2()
+void test2() {
+ // CHECK: {{call.*@objc_msgSend}}
+ // CHECK: {{call.*@objc_msgSend}}
+ // CHECK: {{call.*@objc_msgSend}}
+ // CHECK: bitcast i8*
+ NSString *str1 = NSString.alloc.init.retain;
+}
+
+@interface Test2 : NSString
+- (id)init;
+@end
+
+@implementation Test2
+// CHECK: define internal i8* @"\01-[Test2 init]"
+- (id)init {
+ // CHECK: {{call.*@objc_msgSendSuper}}
+ // CHECK-NEXT: bitcast i8*
+ return [super init];
+}
+@end
+
+@interface Test3 : NSString
+- (id)init;
+@end
+
+@implementation Test3
+// CHECK: define internal i8* @"\01-[Test3 init]"
+- (id)init {
+ // CHECK: {{call.*@objc_msgSendSuper}}
+ // CHECK-NEXT: bitcast i8*
+ return [super init];
+}
+@end
OpenPOWER on IntegriCloud