From c8ae1e47510e5d35896aa0eff0dc52f6d0a0a022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 10 Apr 2014 15:59:37 +0200 Subject: [PATCH] Fixed #5658 (false positive: (error) Uninitialized variable: s) --- lib/checkuninitvar.cpp | 5 ++++- test/testuninitvar.cpp | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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() {