IndVarSimplify: Avoid UB from binding a reference to a null pointer

Calling operator* on a WeakVH whose Value is null hits undefined
behaviour, since we bind the value to a reference. Instead, go through
`operator Value*` so that we work with the pointer itself.

Found by ubsan.

llvm-svn: 240214
This commit is contained in:
Justin Bogner 2015-06-20 06:24:05 +00:00
parent 34d3376afc
commit 485212f67c
1 changed files with 4 additions and 3 deletions

View File

@ -2013,10 +2013,11 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
// Now that we're done iterating through lists, clean up any instructions
// which are now dead.
while (!DeadInsts.empty())
if (Instruction *Inst =
dyn_cast_or_null<Instruction>(&*DeadInsts.pop_back_val()))
while (!DeadInsts.empty()) {
Value *V = static_cast<Value *>(DeadInsts.pop_back_val());
if (Instruction *Inst = dyn_cast_or_null<Instruction>(V))
RecursivelyDeleteTriviallyDeadInstructions(Inst, TLI);
}
// The Rewriter may not be used from this point on.