diff --git a/lib/astutils.cpp b/lib/astutils.cpp index 67d89898239..c0e598bd790 100644 --- a/lib/astutils.cpp +++ b/lib/astutils.cpp @@ -3417,7 +3417,7 @@ static ExprUsage getFunctionUsage(const Token* tok, int indirect, const Settings // variable init/constructor call? if (!func && ftok->variable() && ftok == ftok->variable()->nameToken()) { // STL types or containers don't initialize external variables - if (ftok->variable()->isStlType() || (ftok->variable()->valueType() && ftok->variable()->valueType()->container)) + if (indirect == 0 && (ftok->variable()->isStlType() || (ftok->variable()->valueType() && ftok->variable()->valueType()->container))) return ExprUsage::Used; // TODO: resolve multiple constructors if (ftok->variable()->type() && ftok->variable()->type()->classScope) { diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index e61579f8024..d04f3c62e8e 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -7784,6 +7784,13 @@ class TestUninitVar : public TestFixture { " *s.p = 0;\n" "}\n"); ASSERT_EQUALS("", errout_str()); + + valueFlowUninit("void f() {\n" + " int x;\n" + " std::vector v{ &x };\n" + " *v[0] = 0;\n" + "}\n"); + ASSERT_EQUALS("", errout_str()); } void valueFlowUninitForLoop()