diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 7a1045baa..409693824 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1461,6 +1461,8 @@ bool CheckUninitVar::checkLoopBody(const Token *tok, const Variable& var, const if (isMemberVariableUsage(tok, var.isPointer(), membervar)) usetok = tok; + else if (Token::Match(tok->previous(), "[(,] %var% [,)]")) + return true; } else { if (isVariableUsage(tok, var.isPointer(), _tokenizer->isCPP())) usetok = tok; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 2adb164ff..7c3485450 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -2731,6 +2731,14 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + // for + checkUninitVar2("struct AB { int a; };\n" + "void f() {\n" + " struct AB ab;\n" + " while (x) { clear(ab); z = ab.a; }\n" + "}"); + ASSERT_EQUALS("", errout.str()); + // address of member checkUninitVar2("struct AB { int a[10]; int b; };\n" "void f() {\n"