| // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -fobjc-dispatch-method=mixed -o - %s | FileCheck %s |
| // rdar://10444476 |
| |
| @interface NSObject |
| - (id) new; |
| @end |
| |
| @interface MyObject : NSObject |
| - (char)isEqual:(id) __attribute__((ns_consumed)) object; |
| @end |
| |
| MyObject *x; |
| |
| void foo() |
| { |
| id obj = [NSObject new]; |
| [x isEqual : obj]; |
| } |
| |
| // CHECK: [[TMP:%.*]] = alloca i8 |
| // CHECK: [[FIVE:%.*]] = call i8* @objc_retain |
| // CHECK-NEXT: [[SIX:%.*]] = bitcast |
| // CHECK-NEXT: [[SEVEN:%.*]] = icmp eq i8* [[SIX]], null |
| // CHECK-NEXT: br i1 [[SEVEN]], label [[NULLINIT:%.*]], label [[CALL_LABEL:%.*]] |
| // CHECK: [[FN:%.*]] = load i8** getelementptr inbounds |
| // CHECK-NEXT: [[EIGHT:%.*]] = bitcast i8* [[FN]] |
| // CHECK-NEXT: [[CALL:%.*]] = call signext i8 [[EIGHT]] |
| // CHECK-NEXT store i8 [[CALL]], i8* [[TMP]] |
| // CHECK-NEXT br label [[CONT:%.*]] |
| // CHECK: call void @objc_release(i8* [[FIVE]]) nounwind |
| // CHECK-NEXT: call void @llvm.memset |
| // CHECK-NEXT br label [[CONT]] |