diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 34ac3a7c7..70eb3b061 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -7076,7 +7076,7 @@ static void valueFlowUninit(TokenList* tokenlist, SymbolDatabase* /*symbolDataba uninitValue.valueType = ValueFlow::Value::ValueType::UNINIT; uninitValue.tokvalue = tok; if (var->isArray()) - uninitValue.indirect = 1; + uninitValue.indirect = var->dimensions().size(); bool partial = false; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 0298ff652..883bb16e7 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -6139,6 +6139,19 @@ private: " (*fp[0])();\n" "}"); ASSERT_EQUALS("", errout.str()); + + valueFlowUninit("static void Foo(double* p) {\n" + " p[0] = 0;\n" + " p[1] = 0;\n" + " p[2] = 0;\n" + " p[3] = 0;\n" + "}\n" + "double f() {\n" + " double L[2][2];\n" + " Foo(*L);\n" + " return L[0][0];\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void uninitvar_memberaccess() {