diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index ea9d276b4..aca9c6e87 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1253,7 +1253,7 @@ const Token* CheckUninitVar::isVariableUsage(bool cpp, const Token *vartok, cons const Token* deref = derefValue->astOperand1(); while (deref && deref->isCast()) deref = deref->astOperand1(); - if (deref == vartok) + if (deref == vartok || Token::simpleMatch(deref, "+")) return nullptr; } if (alloc != NO_ALLOC && astIsRhs(valueExpr)) diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index fd0ffea2c..520336e38 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -2080,6 +2080,13 @@ private: " return p;\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + checkUninitVar("void f(int n) {\n" + " int* p = (int*)malloc(n * sizeof(int));\n" + " for (int i = 0; i < n; ++i)\n" + " *(p + i) = 0;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } // class / struct..