From 7fdaba43ed2034b326f053af9dc0764e72fd627b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 10 Apr 2013 20:46:44 +0200 Subject: [PATCH] Uninitialized variables: Fixed fp when initializing struct with function in loop body --- lib/checkuninitvar.cpp | 2 ++ test/testuninitvar.cpp | 8 ++++++++ 2 files changed, 10 insertions(+) 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"