diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index d5d0e8290..9e219cb20 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1165,9 +1165,6 @@ bool CheckUninitVar::isVariableUsage(const Token *vartok) const if (vartok->previous()->str() == "return") return true; - if (Token::Match(vartok->next(), "++|--|%op%")) - return true; - if (Token::Match(vartok->previous(), "++|--|%op%")) { if (vartok->previous()->str() == ">>" && _tokenizer->isCPP()) { // assume that variable is initialized @@ -1179,6 +1176,9 @@ bool CheckUninitVar::isVariableUsage(const Token *vartok) const } } + if (Token::Match(vartok->next(), "++|--|%op%")) + return true; + if (vartok->strAt(1) == "]") return true; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 488a28fde..7c5022388 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -1746,6 +1746,12 @@ private: ASSERT_EQUALS("[test.c:3]: (error) Uninitialized variable: x\n", errout.str()); } + checkUninitVar2("void f() {\n" + " int i, i2;\n" + " strm >> i >> i2;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + // conditional initialization checkUninitVar2("void f() {\n" " int x;\n"