diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 863d67675..082030325 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1607,7 +1607,10 @@ bool CheckUninitVar::checkLoopBody(const Token *tok, const Variable& var, const assign = false; break; } else if (tok2->str() == "(") { - ++indentlevel; + if (Token::Match(tok2->astOperand1(), "sizeof")) + tok2 = tok2->link(); + else + ++indentlevel; } else if (tok2->str() == ")") { if (indentlevel <= 1U) break; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index eebc4f554..66505bfae 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -3265,6 +3265,15 @@ private: " }\n" "}"); ASSERT_EQUALS("", errout.str()); + + checkUninitVar2("void f(void) {\n" // #5658 + " struct Foo *foo;\n" + " while (true) {\n" + " foo = malloc(sizeof(*foo));\n" + " foo->x = 0;\n" + " }\n" + "}"); + ASSERT_EQUALS("", errout.str()); } void uninitvar2_4494() {