ValueFlow: Clarify note when impossible value is assigned (#10297)

This commit is contained in:
Daniel Marjamäki 2021-06-24 17:10:06 +02:00
parent 79f59d8f39
commit 769b20b426
2 changed files with 13 additions and 4 deletions

View File

@ -1637,9 +1637,9 @@ struct OnException {
void TokenList::validateAst() const
{
OnException oe{[&] {
if (mSettings->debugnormal)
mTokensFrontBack.front->printOut();
}};
if (mSettings->debugnormal)
mTokensFrontBack.front->printOut();
}};
// Check for some known issues in AST to avoid crash/hang later on
std::set < const Token* > safeAstTokens; // list of "safe" AST tokens without endless recursion
for (const Token *tok = mTokensFrontBack.front; tok; tok = tok->next()) {

View File

@ -4086,7 +4086,16 @@ static void valueFlowForwardAssign(Token* const tok,
values.remove_if(std::mem_fn(&ValueFlow::Value::isTokValue));
if (tok->astParent()) {
for (ValueFlow::Value& value : values) {
const std::string info = "Assignment '" + tok->astParent()->expressionString() + "', assigned value is " + value.infoString();
std::string valueKind;
if (value.valueKind == ValueFlow::Value::ValueKind::Impossible) {
if (value.bound == ValueFlow::Value::Bound::Point)
valueKind = "never ";
else if (value.bound == ValueFlow::Value::Bound::Lower)
valueKind = "less than ";
else if (value.bound == ValueFlow::Value::Bound::Upper)
valueKind = "greater than ";
}
const std::string info = "Assignment '" + tok->astParent()->expressionString() + "', assigned value is " + valueKind + value.infoString();
value.errorPath.emplace_back(tok, info);
}
}