From 13d2beb14d0eceb9421bf3a8f4ea761e6afcef09 Mon Sep 17 00:00:00 2001 From: Akira Hatanaka Date: Thu, 31 Aug 2017 18:27:47 +0000 Subject: [ObjCARC] Pass the correct BasicBlock to fix assertion failure. The BasicBlock passed to FindPredecessorRetainWithSafePath should be the parent block of Autorelease. This fixes a crash that occurs in FindDependencies when StartInst is not in StartBB. rdar://problem/33866381 llvm-svn: 312266 --- llvm/test/Transforms/ObjCARC/rv.ll | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'llvm/test/Transforms/ObjCARC') diff --git a/llvm/test/Transforms/ObjCARC/rv.ll b/llvm/test/Transforms/ObjCARC/rv.ll index e99ba92dc45..d84a875684f 100644 --- a/llvm/test/Transforms/ObjCARC/rv.ll +++ b/llvm/test/Transforms/ObjCARC/rv.ll @@ -314,6 +314,25 @@ define void @test25() { ret void } +; Check that ObjCARCOpt::OptimizeReturns removes the redundant calls even when +; they are not in the same basic block. This code used to cause an assertion +; failure. + +; CHECK-LABEL: define i8* @test26() +; CHECK: call i8* @returner() +; CHECK-NOT: call +define i8* @test26() { +bb0: + %v0 = call i8* @returner() + %v1 = tail call i8* @objc_retain(i8* %v0) + br label %bb1 +bb1: + %v2 = tail call i8* @objc_autoreleaseReturnValue(i8* %v1) + br label %bb2 +bb2: + ret i8* %v2 +} + !0 = !{} ; CHECK: attributes [[NUW]] = { nounwind } -- cgit v1.2.3