summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/ObjCARC
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/lib/Transforms/ObjCARC
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/lib/Transforms/ObjCARC')
-rw-r--r--llvm/lib/Transforms/ObjCARC/ObjCARC.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARC.h b/llvm/lib/Transforms/ObjCARC/ObjCARC.h
index 1dbe72c7569..751c8f30e81 100644
--- a/llvm/lib/Transforms/ObjCARC/ObjCARC.h
+++ b/llvm/lib/Transforms/ObjCARC/ObjCARC.h
@@ -58,7 +58,7 @@ static inline void EraseInstruction(Instruction *CI) {
// Replace the return value with the argument.
assert((IsForwarding(GetBasicARCInstKind(CI)) ||
(IsNoopOnNull(GetBasicARCInstKind(CI)) &&
- isa<ConstantPointerNull>(OldArg))) &&
+ IsNullOrUndef(OldArg->stripPointerCasts()))) &&
"Can't delete non-forwarding instruction with users!");
CI->replaceAllUsesWith(OldArg);
}
OpenPOWER on IntegriCloud