Fixed #8708 (FP: Accessing an item in container that is empty)
This commit is contained in:
parent
4378327c43
commit
6223204a06
|
@ -3549,6 +3549,12 @@ static void valueFlowContainerSize(TokenList *tokenlist, SymbolDatabase* symbold
|
|||
if (!Token::Match(var->nameToken(), "%name% ;"))
|
||||
continue;
|
||||
ValueFlow::Value value(0);
|
||||
if (var->valueType()->container->size_templateArgNo >= 0) {
|
||||
if (var->dimensions().size() == 1 && var->dimensions().front().known)
|
||||
value.intvalue = var->dimensions().front().num;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
value.valueType = ValueFlow::Value::ValueType::CONTAINER_SIZE;
|
||||
value.setKnown();
|
||||
valueFlowContainerForward(var->nameToken()->next(), var->declarationId(), value, settings);
|
||||
|
|
|
@ -3352,6 +3352,12 @@ private:
|
|||
"}";
|
||||
ASSERT_EQUALS("", isKnownContainerSizeValue(tokenValues(code, "ints . front"), 0));
|
||||
|
||||
code = "void f() {\n"
|
||||
" std::array<int,10> ints;\n" // Array size is 10
|
||||
" ints.front();\n"
|
||||
"}";
|
||||
ASSERT_EQUALS("", isKnownContainerSizeValue(tokenValues(code, "ints . front"), 10));
|
||||
|
||||
code = "void f() {\n"
|
||||
" std::string s=\"abc\";\n" // size of s is 3
|
||||
" s.size();\n"
|
||||
|
|
Loading…
Reference in New Issue