summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorPete Cooper <peter_cooper@apple.com>2019-01-02 21:00:02 +0000
committerPete Cooper <peter_cooper@apple.com>2019-01-02 21:00:02 +0000
commit8d5804802498efe95bb3b81d2fdab607e7d1e02b (patch)
treee52de6dd4b7579445ea0c6bb8f1a0b4c4b71a20e /llvm/test/Transforms
parent88590e99f2757ffc1d3816f7508bef8310a520e6 (diff)
downloadbcm5719-llvm-8d5804802498efe95bb3b81d2fdab607e7d1e02b.tar.gz
bcm5719-llvm-8d5804802498efe95bb3b81d2fdab607e7d1e02b.zip
Fix assert in ObjCARC optimizer when deleting retainBlock of null or undef.
The caller to EraseInstruction had this conditional: // ARC calls with null are no-ops. Delete them. if (IsNullOrUndef(Arg)) but the assert inside EraseInstruction only allowed ConstantPointerNull and not undef or bitcasts. This adds support for both of these cases. rdar://problem/47003805 llvm-svn: 350261
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/ObjCARC/rv.ll5
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/test/Transforms/ObjCARC/rv.ll b/llvm/test/Transforms/ObjCARC/rv.ll
index 604ef59f119..ca3d7e2f848 100644
--- a/llvm/test/Transforms/ObjCARC/rv.ll
+++ b/llvm/test/Transforms/ObjCARC/rv.ll
@@ -61,6 +61,11 @@ define void @test2() {
call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* null)
call i8* @llvm.objc.autoreleaseReturnValue(i8* null)
; call i8* @llvm.objc.retainAutoreleaseReturnValue(i8* null) ; TODO
+ %bitcast = bitcast i32* null to i8*
+ %rb = call i8* @llvm.objc.retainBlock(i8* %bitcast)
+ call void @use_pointer(i8* %rb)
+ %rb2 = call i8* @llvm.objc.retainBlock(i8* undef)
+ call void @use_pointer(i8* %rb2)
ret void
}
OpenPOWER on IntegriCloud