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"