Fariborz Jahanian | 3c52d36 | 2012-01-30 23:39:30 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -fobjc-dispatch-method=mixed -o - %s | FileCheck %s |
| 2 | // rdar://10444476 |
| 3 | |
| 4 | @interface NSObject |
| 5 | - (id) new; |
| 6 | @end |
| 7 | |
| 8 | @interface MyObject : NSObject |
| 9 | - (char)isEqual:(id) __attribute__((ns_consumed)) object; |
| 10 | @end |
| 11 | |
| 12 | MyObject *x; |
| 13 | |
| 14 | void foo() |
| 15 | { |
| 16 | id obj = [NSObject new]; |
| 17 | [x isEqual : obj]; |
| 18 | } |
| 19 | |
Benjamin Kramer | d6d76f2 | 2012-08-17 12:28:21 +0000 | [diff] [blame] | 20 | // CHECK: [[TMP:%.*]] = alloca i8{{$}} |
Fariborz Jahanian | 3c52d36 | 2012-01-30 23:39:30 +0000 | [diff] [blame] | 21 | // CHECK: [[FIVE:%.*]] = call i8* @objc_retain |
| 22 | // CHECK-NEXT: [[SIX:%.*]] = bitcast |
| 23 | // CHECK-NEXT: [[SEVEN:%.*]] = icmp eq i8* [[SIX]], null |
| 24 | // CHECK-NEXT: br i1 [[SEVEN]], label [[NULLINIT:%.*]], label [[CALL_LABEL:%.*]] |
Fariborz Jahanian | f20f46c | 2012-01-31 01:05:11 +0000 | [diff] [blame] | 25 | // CHECK: [[FN:%.*]] = load i8** getelementptr inbounds |
| 26 | // CHECK-NEXT: [[EIGHT:%.*]] = bitcast i8* [[FN]] |
Fariborz Jahanian | 3c52d36 | 2012-01-30 23:39:30 +0000 | [diff] [blame] | 27 | // CHECK-NEXT: [[CALL:%.*]] = call signext i8 [[EIGHT]] |
Benjamin Kramer | d6d76f2 | 2012-08-17 12:28:21 +0000 | [diff] [blame] | 28 | // CHECK-NEXT: store i8 [[CALL]], i8* [[TMP]] |
| 29 | // CHECK-NEXT: br label [[CONT:%.*]] |
Fariborz Jahanian | 3c52d36 | 2012-01-30 23:39:30 +0000 | [diff] [blame] | 30 | // CHECK: call void @objc_release(i8* [[FIVE]]) nounwind |
| 31 | // CHECK-NEXT: call void @llvm.memset |
Benjamin Kramer | d6d76f2 | 2012-08-17 12:28:21 +0000 | [diff] [blame] | 32 | // CHECK-NEXT: br label [[CONT]] |