blob: a8e5acd57e61eb721434d1c46dedd21f45ac84aa [file] [log] [blame]
Fariborz Jahanian3c52d362012-01-30 23:39:30 +00001// 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
12MyObject *x;
13
14void foo()
15{
16 id obj = [NSObject new];
17 [x isEqual : obj];
18}
19
Benjamin Kramerd6d76f22012-08-17 12:28:21 +000020// CHECK: [[TMP:%.*]] = alloca i8{{$}}
Fariborz Jahanian3c52d362012-01-30 23:39:30 +000021// 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 Jahanianf20f46c2012-01-31 01:05:11 +000025// CHECK: [[FN:%.*]] = load i8** getelementptr inbounds
26// CHECK-NEXT: [[EIGHT:%.*]] = bitcast i8* [[FN]]
Fariborz Jahanian3c52d362012-01-30 23:39:30 +000027// CHECK-NEXT: [[CALL:%.*]] = call signext i8 [[EIGHT]]
Benjamin Kramerd6d76f22012-08-17 12:28:21 +000028// CHECK-NEXT: store i8 [[CALL]], i8* [[TMP]]
29// CHECK-NEXT: br label [[CONT:%.*]]
Fariborz Jahanian3c52d362012-01-30 23:39:30 +000030// CHECK: call void @objc_release(i8* [[FIVE]]) nounwind
31// CHECK-NEXT: call void @llvm.memset
Benjamin Kramerd6d76f22012-08-17 12:28:21 +000032// CHECK-NEXT: br label [[CONT]]