diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index a1a1cadc1..5b49bd81f 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1113,8 +1113,8 @@ bool CheckUninitVar::checkScopeForVariable(const Token *tok, const unsigned int } // assignment with nonzero constant.. - if (Token::Match(tok, "[;{}] %var% = - %var% ;") && tok->next()->varId() > 0) - notzero.insert(tok->next()->varId()); + if (Token::Match(tok->previous(), "[;{}] %var% = - %var% ;") && tok->varId() > 0) + notzero.insert(tok->varId()); // Inner scope.. if (Token::simpleMatch(tok, "if (")) { diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 4cc978559..a6f318c21 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -1893,6 +1893,16 @@ private: "}\n"); ASSERT_EQUALS("", errout.str()); + checkUninitVar2("void f() {\n" + " int i, y;\n" + " if (x) {\n" + " y = -ENOMEM;\n" + " if (y != 0) return;\n" + " i++;\n" + " }\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + // for, while checkUninitVar2("void f() {\n" " int x;\n"