mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-23 19:59:57 +00:00
Fix heap-use-after-free bug in expandSDiv when the operands are
constants, as discovered by ASAN. Patch by Mehdi Amini! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221401 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
36c4749c19
commit
9f59bc4a0d
@ -398,11 +398,13 @@ bool llvm::expandRemainder(BinaryOperator *Rem) {
|
||||
Rem->dropAllReferences();
|
||||
Rem->eraseFromParent();
|
||||
|
||||
// If we didn't actually generate a udiv instruction, we're done
|
||||
BinaryOperator *BO = dyn_cast<BinaryOperator>(Builder.GetInsertPoint());
|
||||
if (!BO || BO->getOpcode() != Instruction::URem)
|
||||
// If we didn't actually generate an urem instruction, we're done
|
||||
// This happens for example if the input were constant. In this case the
|
||||
// Builder insertion point was unchanged
|
||||
if (Rem == Builder.GetInsertPoint())
|
||||
return true;
|
||||
|
||||
BinaryOperator *BO = dyn_cast<BinaryOperator>(Builder.GetInsertPoint());
|
||||
Rem = BO;
|
||||
}
|
||||
|
||||
@ -456,11 +458,13 @@ bool llvm::expandDivision(BinaryOperator *Div) {
|
||||
Div->dropAllReferences();
|
||||
Div->eraseFromParent();
|
||||
|
||||
// If we didn't actually generate a udiv instruction, we're done
|
||||
BinaryOperator *BO = dyn_cast<BinaryOperator>(Builder.GetInsertPoint());
|
||||
if (!BO || BO->getOpcode() != Instruction::UDiv)
|
||||
// If we didn't actually generate an udiv instruction, we're done
|
||||
// This happens for example if the input were constant. In this case the
|
||||
// Builder insertion point was unchanged
|
||||
if (Div == Builder.GetInsertPoint())
|
||||
return true;
|
||||
|
||||
BinaryOperator *BO = dyn_cast<BinaryOperator>(Builder.GetInsertPoint());
|
||||
Div = BO;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user