зеркало из https://github.com/microsoft/clang-1.git
Fix regression introduced in r80786 and reported in PR 4867. We should use
'dyn_cast' instead of 'cast' as the denominator value could be UnknownVal (and is not guaranteed to be a DefinedVal). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80869 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
d2a8775c61
Коммит
970e03a6bf
|
@ -716,11 +716,16 @@ void CheckBadDiv::PreVisitBinaryOperator(CheckerContext &C,
|
|||
return;
|
||||
}
|
||||
|
||||
// Handle the case where 'Denom' is UnknownVal.
|
||||
const DefinedSVal *DV = dyn_cast<DefinedSVal>(&Denom);
|
||||
|
||||
if (!DV)
|
||||
return;
|
||||
|
||||
// Check for divide by zero.
|
||||
ConstraintManager &CM = C.getConstraintManager();
|
||||
const GRState *stateNotZero, *stateZero;
|
||||
llvm::tie(stateNotZero, stateZero) = CM.AssumeDual(C.getState(),
|
||||
cast<DefinedSVal>(Denom));
|
||||
llvm::tie(stateNotZero, stateZero) = CM.AssumeDual(C.getState(), *DV);
|
||||
|
||||
if (stateZero && !stateNotZero) {
|
||||
if (ExplodedNode *N = C.GenerateNode(B, stateZero, true)) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче