diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index a1e64c344..4273a0844 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -677,7 +677,7 @@ private: } // it is possible that the variable is initialized here - if (Token::Match(tok2->previous(), "[(,] %var% [+-,)]")) + if (Token::Match(tok2->previous(), "[(,] %var% [,)]")) bailouts.insert(tok2->varId()); // array initialization.. @@ -689,7 +689,7 @@ private: if ((*it)->varId == tok2->varId()) { const UninitVar *c = dynamic_cast(*it); - if (c && c->array) + if (c && (c->array || (c->pointer && c->alloc))) bailouts.insert(tok2->varId()); break; } diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 5f303dae9..a079b7fd0 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -1178,6 +1178,13 @@ private: "}\n"); ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: f\n", errout.str()); + checkUninitVar("void f()\n" + "{\n" + " int i;\n" + " x(i+2);\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: i\n", errout.str()); + checkUninitVar("void f()\n" "{\n" " char *p = malloc(10);\n"