diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 517dd4601..7a3b78190 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1511,6 +1511,8 @@ void CheckUninitVar::valueFlowUninit() continue; if (v->indirect > 1 || v->indirect < 0) continue; + if (v->indirect == 0 && tok->valueType() && tok->valueType()->pointer == 0 && !isVariableUsage(tok, false, NO_ALLOC, 0)) + continue; bool uninitderef = false; if (tok->variable()) { bool unknown; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 9b596cdd8..b361cbec8 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -4601,6 +4601,12 @@ private: "}\n"); ASSERT_EQUALS("", errout.str()); + valueFlowUninit("void json_parse_nat_type_flags(json_t *root) {\n" + " int index;\n" + " json_array_foreach(root, index, value) {}\n" + "}"); + ASSERT_EQUALS("", errout.str()); + valueFlowUninit("int foo()\n" "{\n" " int i;\n"