| // RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s |
| |
| @interface NSObject |
| + (id)alloc; |
| - (id)init; |
| - (id)retain; |
| @end |
| |
| @interface NSString : NSObject |
| @end |
| |
| // CHECK-LABEL: 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-LABEL: 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 |