diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 8463f6a1c8e..8f044acb44b 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -844,7 +844,8 @@ bool CheckUninitVar::checkScopeForVariable(const Token *tok, const Variable& var } // assume that variable is assigned - return true; + if (!Token::simpleMatch(tok->astParent(), "<<")) + return true; } } } diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index b3c988e5b00..331bdf8d3cb 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -570,6 +570,13 @@ class TestUninitVar : public TestFixture { "}"); ASSERT_EQUALS("[test.cpp:3:17]: (error) Uninitialized variable: p [legacyUninitvar]\n", errout_str()); } + + checkUninitVar("void f() {\n" // #13908 + " int* i = new int;\n" + " std::cout << i << \", \" << *i;\n" + " delete i;\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:3:32]: (error) Memory is allocated but not initialized: i [uninitdata]\n", errout_str()); } // #8494 : Overloaded & operator