diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index d1e844712..8477cd5a0 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -522,8 +522,8 @@ bool CheckUninitVar::checkScopeForVariable(const Token *tok, const Variable& var else if (Token::Match(tok, "for|while (") || Token::simpleMatch(tok, "do {")) { const bool forwhile = Token::Match(tok, "for|while ("); - // is variable initialized in for-head (don't report errors yet)? - if (forwhile && checkIfForWhileHead(tok->next(), var, true, false, *alloc, membervar)) + // is variable initialized in for-head? + if (forwhile && checkIfForWhileHead(tok->next(), var, tok->str() == "for", false, *alloc, membervar)) return true; // goto the { diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 3a01d9724..a8ff65f39 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -3595,6 +3595,13 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + checkUninitVar("int f() {\n" + " char *p = (char *)malloc(256);\n" + " while(*p && *p == '_')\n" + " p++;\n" + "}"); + ASSERT_EQUALS("[test.cpp:3]: (error) Memory is allocated but not initialized: p\n", errout.str()); + // #6646 - init in for loop checkUninitVar("void f() {\n" // No FP " for (int i;;i++)\n"