diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 7dd32bc3c..89ae044fa 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -5426,6 +5426,8 @@ static bool isContainerSizeChanged(nonneg int varId, const Token *start, const T break; }; } + if (isContainerSizeChangedByFunction(tok)) + return true; } return false; } diff --git a/test/testcondition.cpp b/test/testcondition.cpp index 19b5bcd60..aeec2040a 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -3218,6 +3218,33 @@ private: ASSERT_EQUALS("", errout.str()); } + void alwaysTrueContainer() { + // #9329 + check("void c1(std::vector&);\n" + "void c2(std::vector&);\n" + "void foo(int flag) {\n" + " std::vector g;\n" + " if (flag)\n" + " c1(g );\n" + " else\n" + " c2(g );\n" + " if ( !g.empty() )\n" + " return;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + + check("void foo(int flag) {\n" + " std::vector g;\n" + " if (flag)\n" + " c1(g );\n" + " else\n" + " c2(g );\n" + " if ( !g.empty() )\n" + " return;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + } + void multiConditionAlwaysTrue() { check("void f() {\n" " int val = 0;\n"