From c8a450c9beb93e77b032bc42a163a54a3be14827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 25 Dec 2016 22:43:29 +0100 Subject: [PATCH] uninitvar: Fixed a FP seen in daca2 --- lib/checkuninitvar.cpp | 3 ++- test/testuninitvar.cpp | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 5dbcf228a..d4274d9be 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -839,7 +839,8 @@ void CheckUninitVar::checkRhs(const Token *tok, const Variable &var, Alloc alloc uninitvarError(tok, tok->str(), alloc); else if (!membervar.empty() && isMemberVariableUsage(tok, var.isPointer(), alloc, membervar)) uninitStructMemberError(tok, tok->str() + "." + membervar); - + else if (Token::Match(tok, "%var% =")) + break; } else if (tok->str() == ";" || (indent==0 && tok->str() == ",")) break; else if (tok->str() == "(") diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 8eb75ae27..8a39ae5f2 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -969,6 +969,11 @@ private: "}"); ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: y\n", errout.str()); + checkUninitVar("void foo() {\n" // pidgin-2.11.0/finch/libgnt/gnttree.c + " int x = (x = bar()) ? x : 0;\n" + "}"); + ASSERT_EQUALS("", errout.str()); + // ; { .. } checkUninitVar("int foo()\n" "{\n"