diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 7fa7c1c760b..4f611a94812 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -162,7 +162,7 @@ void CheckUninitVar::checkScope(const Scope* scope, const std::set tok = tok->next(); while (Token::simpleMatch(tok->link(), "] [")) tok = tok->link()->next(); - if (Token::Match(tok->link(), "] =|{")) + if (Token::Match(tok->link(), "] =|{|(")) continue; } diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index b8c1e73342d..b22c5d9efc4 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -2309,12 +2309,12 @@ void Variable::evaluate(const Settings* settings) { // Is there initialization in variable declaration const Token *initTok = mNameToken ? mNameToken->next() : nullptr; - while (Token::Match(initTok, "[|(")) { + while (Token::Match(initTok, "[")) { initTok = initTok->link()->next(); if (Token::simpleMatch(initTok, ")")) initTok = initTok->next(); } - if (Token::Match(initTok, "=|{") || (initTok && initTok->isSplittedVarDeclEq())) + if (Token::Match(initTok, "[={(]") || (initTok && initTok->isSplittedVarDeclEq())) setFlag(fIsInit, true); if (!settings) diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 3a64a9834bc..a4c7a78c5a6 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -1851,6 +1851,13 @@ class TestUninitVar : public TestFixture { " return a[0];\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + checkUninitVar("int f() {\n" // #12355 + " const int x[10](1, 2);\n" + " if (x[0] == 1) {}\n" + " return x[0];\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void uninitvar_pointertoarray() { @@ -6379,6 +6386,14 @@ class TestUninitVar : public TestFixture { " char* p = new (buf) char[100];\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + // #12355 + valueFlowUninit("int f() {\n" + " const int x[10](1, 2);\n" + " if (x[0] == 1) {}\n" + " return x[0];\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void valueFlowUninitBreak() { // Do not show duplicate warnings about the same uninitialized value