diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index a3881cb22..c463a8307 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -6295,8 +6295,9 @@ static void valueFlowContainerSize(TokenList *tokenlist, SymbolDatabase* symbold value.valueType = ValueFlow::Value::ValueType::CONTAINER_SIZE; value.setKnown(); valueFlowContainerForward(tok->next(), tok->variable(), value, tokenlist); - } else if (action == Library::Container::Action::RESIZE && tok->tokAt(4)->hasKnownIntValue()) { - ValueFlow::Value value(tok->tokAt(4)->values().front()); + } else if (action == Library::Container::Action::RESIZE && tok->tokAt(3)->astOperand2() && + tok->tokAt(3)->astOperand2()->hasKnownIntValue()) { + ValueFlow::Value value(tok->tokAt(3)->astOperand2()->values().front()); value.valueType = ValueFlow::Value::ValueType::CONTAINER_SIZE; value.setKnown(); valueFlowContainerForward(tok->next(), tok->variable(), value, tokenlist); diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 638c24e80..61b397a71 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -5079,6 +5079,16 @@ private: ASSERT_EQUALS("", isPossibleContainerSizeValue(tokenValues(code, "x . front", ValueFlow::Value::ValueType::CONTAINER_SIZE), 0)); + code = "int f() {\n" + " const size_t len = 6;\n" + " std::vector v;\n" + " v.resize(1 + len);\n" + " return v.front();\n" + "}\n"; + ASSERT_EQUALS( + "", + isKnownContainerSizeValue(tokenValues(code, "v . front", ValueFlow::Value::ValueType::CONTAINER_SIZE), 7)); + code = "void f(std::string str) {\n" " if (str == \"123\") {\n" " bool x = (str == \"\");\n"