From 29d7975eaddfcc6ff8c6d7ac734f0a5c8ad866bf Mon Sep 17 00:00:00 2001 From: chrchr Date: Wed, 31 Jan 2024 15:24:28 +0100 Subject: [PATCH] Fix #12395 debug: SymbolDatabase couldn't resolve all user defined types with static member --- lib/symboldatabase.cpp | 4 +++- test/testsymboldatabase.cpp | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index a454d5c0951..1f8e5c6f3ac 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -937,6 +937,8 @@ void SymbolDatabase::createSymbolDatabaseNeedInitialization() bool unknown = false; for (const Variable& var: scope.varlist) { + if (var.isStatic()) + continue; if (var.isClass() && !var.isReference()) { if (var.type()) { // does this type need initialization? @@ -947,7 +949,7 @@ void SymbolDatabase::createSymbolDatabaseNeedInitialization() unknown = true; } } - } else if (!var.hasDefault() && !var.isStatic()) { + } else if (!var.hasDefault()) { needInitialization = true; break; } diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 0bd82aacc5a..a83473e25ba 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -3013,6 +3013,14 @@ class TestSymbolDatabase : public TestFixture { "};\n"); ASSERT_EQUALS("", errout.str()); } + { + GET_SYMBOL_DB_DBG("struct S {\n" // #12395 + " static S s;\n" + "};\n"); + ASSERT_EQUALS("", errout.str()); + const Variable* const s = db->getVariableFromVarId(1); + ASSERT(s->scope()->definedType->needInitialization == Type::NeedInitialization::False); + } } void tryCatch1() {