Container size: Fix false positive
This commit is contained in:
parent
e53be26f48
commit
5de683ec49
|
@ -3492,6 +3492,8 @@ static bool hasContainerSizeGuard(const Token *tok, unsigned int containerId)
|
|||
return false;
|
||||
}
|
||||
|
||||
static bool isContainerSizeChanged(unsigned int varId, const Token *start, const Token *end);
|
||||
|
||||
static bool isContainerSizeChangedByFunction(const Token *tok)
|
||||
{
|
||||
const Token *parent = tok->astParent();
|
||||
|
@ -3536,6 +3538,13 @@ static void valueFlowContainerForward(const Token *tok, unsigned int containerId
|
|||
while (nullptr != (tok = tok->next())) {
|
||||
if (Token::Match(tok, "[{}]"))
|
||||
break;
|
||||
if (Token::Match(tok, "while|for (")) {
|
||||
const Token *start = tok->linkAt(1)->next();
|
||||
if (!Token::simpleMatch(start->link(), "{"))
|
||||
break;
|
||||
if (isContainerSizeChanged(containerId, start, start->link()))
|
||||
break;
|
||||
}
|
||||
if (tok->varId() != containerId)
|
||||
continue;
|
||||
if (Token::Match(tok, "%name% ="))
|
||||
|
|
|
@ -3422,6 +3422,14 @@ private:
|
|||
"}";
|
||||
ASSERT(tokenValues(code, "s [").empty());
|
||||
|
||||
// valueFlowContainerForward, loop
|
||||
code = "void f() {\n"
|
||||
" std::stack<Token *> links;\n"
|
||||
" while (!links.empty() || indentlevel)\n"
|
||||
" links.push(tok);\n"
|
||||
"}";
|
||||
ASSERT(tokenValues(code, "links . empty").empty());
|
||||
|
||||
// valueFlowContainerForward, function call
|
||||
code = "void f() {\n"
|
||||
" std::list<int> x;\n"
|
||||
|
|
Loading…
Reference in New Issue