aboutsummaryrefslogtreecommitdiffstats
path: root/test/Transforms/ObjCARC/basic.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/Transforms/ObjCARC/basic.ll')
-rw-r--r--test/Transforms/ObjCARC/basic.ll23
1 files changed, 21 insertions, 2 deletions
diff --git a/test/Transforms/ObjCARC/basic.ll b/test/Transforms/ObjCARC/basic.ll
index ca12792065..2bb312bf26 100644
--- a/test/Transforms/ObjCARC/basic.ll
+++ b/test/Transforms/ObjCARC/basic.ll
@@ -3037,9 +3037,28 @@ end: ; preds = %if.end125, %if.end1
ret void
}
-!0 = metadata !{}
-
declare i32 @__gxx_personality_v0(...)
+declare i32 @objc_sync_enter(i8*)
+declare i32 @objc_sync_exit(i8*)
+
+; Make sure that we understand that objc_sync_{enter,exit} are IC_User not
+; IC_Call/IC_CallOrUser.
+
+; CHECK: define void @test67
+; CHECK-NEXT: call i32 @objc_sync_enter(i8* %x)
+; CHECK-NEXT: call i32 @objc_sync_exit(i8* %x)
+; CHECK-NEXT: ret void
+; CHECK-NEXT: }
+define void @test67(i8* %x) {
+ call i8* @objc_retain(i8* %x)
+ call i32 @objc_sync_enter(i8* %x)
+ call i32 @objc_sync_exit(i8* %x)
+ call void @objc_release(i8* %x), !clang.imprecise_release !0
+ ret void
+}
+
+!0 = metadata !{}
+
; CHECK: attributes #0 = { nounwind readnone }
; CHECK: attributes [[NUW]] = { nounwind }