r239638 - [CGCall] Fix potential invalid iterator decrement in findDominatingStoreToReturnValue.
Alexey Samsonov
vonosmas at gmail.com
Fri Jun 12 14:05:33 PDT 2015
Author: samsonov
Date: Fri Jun 12 16:05:32 2015
New Revision: 239638
URL: http://llvm.org/viewvc/llvm-project?rev=239638&view=rev
Log:
[CGCall] Fix potential invalid iterator decrement in findDominatingStoreToReturnValue.
If llvm.lifetime.end turns out to be the first instruction in the last
basic block, we can decrement the iterator twice, going past rend.
At the moment, this can never happen because llvm.lifetime.end always
goes immediately after bitcast, but relying on this is very brittle.
Modified:
cfe/trunk/lib/CodeGen/CGCall.cpp
Modified: cfe/trunk/lib/CodeGen/CGCall.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=239638&r1=239637&r2=239638&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGCall.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGCall.cpp Fri Jun 12 16:05:32 2015
@@ -2271,11 +2271,10 @@ static llvm::StoreInst *findDominatingSt
if (Intrinsic->getIntrinsicID() == llvm::Intrinsic::lifetime_end) {
const llvm::Value *CastAddr = Intrinsic->getArgOperand(1);
++II;
- if (isa<llvm::BitCastInst>(&*II)) {
- if (CastAddr == &*II) {
- continue;
- }
- }
+ if (II == IE)
+ break;
+ if (isa<llvm::BitCastInst>(&*II) && (CastAddr == &*II))
+ continue;
}
}
I = &*II;
More information about the cfe-commits
mailing list