From eb7b225fc1ce0918f6d6f41fe87f224d6e360f80 Mon Sep 17 00:00:00 2001 From: Paul Fultz II Date: Sat, 19 Jun 2021 06:58:18 -0500 Subject: [PATCH] Fix 10119: ValueFlow; object member is not uninitialized. happens when there is static member also. (#3299) --- lib/symboldatabase.cpp | 2 +- test/testuninitvar.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 5cffbe48b..4ede9290a 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -907,7 +907,7 @@ void SymbolDatabase::createSymbolDatabaseNeedInitialization() unknown = true; } } - } else if (!var->hasDefault()) + } else if (!var->hasDefault() && !var->isStatic()) needInitialization = true; } diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index b1506f809..58e8d0459 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -4832,6 +4832,18 @@ private: " if (!isNull) {}\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + // #10119 + valueFlowUninit("struct Foo {\n" + " int i{};\n" + " static const float cf;\n" + "};\n" + "const float Foo::cf = 0.1f;\n" + "int bar() {\n" + " Foo f;\n" + " return f.i;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void uninitvar_ipa() {