From 32f052d284d1a32712b90eb96e8fb6b0af432638 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 7 Jul 2025 08:35:47 +0200 Subject: [PATCH 1/4] Update testconstructors.cpp --- test/testconstructors.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/testconstructors.cpp b/test/testconstructors.cpp index 39de3b1cf1d..cf13843dda0 100644 --- a/test/testconstructors.cpp +++ b/test/testconstructors.cpp @@ -173,6 +173,7 @@ class TestConstructors : public TestFixture { TEST_CASE(uninitVar34); // ticket #10841 TEST_CASE(uninitVar35); TEST_CASE(uninitVar36); + TEST_CASE(uninitVar37); TEST_CASE(uninitVarEnum1); TEST_CASE(uninitVarEnum2); // ticket #8146 TEST_CASE(uninitVarStream); @@ -3031,6 +3032,15 @@ class TestConstructors : public TestFixture { ASSERT_EQUALS("[test.cpp:5:5]: (warning) Member variable 'S::b' is not initialized in the constructor. [uninitMemberVar]\n", errout_str()); } + void uninitVar37() { + const Settings s = settingsBuilder(settings).library("std.cfg").build(); + check("struct C {\n" // #13989 + " C() = default;\n" + " std::list::const_iterator it;\n" + "};\n", dinit(CheckOptions, $.inconclusive = true, $.s = &s)); + ASSERT_EQUALS("[test.cpp:2:5]: (warning) Member variable 'C::it' is not initialized in the constructor. [uninitMemberVar]\n", errout_str()); + } + void uninitVarArray1() { check("class John\n" "{\n" From fc34fef04f247754374175c89dd447e5d5a61700 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 7 Jul 2025 08:36:53 +0200 Subject: [PATCH 2/4] Update checkclass.cpp --- lib/checkclass.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index 8a12a3e2f66..e4989ba4376 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -244,11 +244,19 @@ void CheckClass::constructors() if (!var.isPointer() && !var.isPointerArray() && var.isClass() && func.type == FunctionType::eConstructor) { // Unknown type so assume it is initialized if (!var.type()) { - if (var.isStlType() && var.valueType() && var.valueType()->containerTypeToken && var.getTypeName() == "std::array") { - const Token* ctt = var.valueType()->containerTypeToken; - if (!ctt->isStandardType() && - (!ctt->type() || ctt->type()->needInitialization != Type::NeedInitialization::True) && - !mSettings->library.podtype(ctt->str())) // TODO: handle complex type expression + if (var.isStlType() && var.valueType() && var.valueType()->containerTypeToken) { + if (var.valueType()->type == ValueType::Type::ITERATOR) + { + // needs initialization + } + else if (var.getTypeName() == "std::array") { + const Token* ctt = var.valueType()->containerTypeToken; + if (!ctt->isStandardType() && + (!ctt->type() || ctt->type()->needInitialization != Type::NeedInitialization::True) && + !mSettings->library.podtype(ctt->str())) // TODO: handle complex type expression + continue; + } + else continue; } else From bfc3267481633cd7798ad100b6f405da870bf5d6 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 7 Jul 2025 09:34:09 +0200 Subject: [PATCH 3/4] Update threadresult.h --- gui/threadresult.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gui/threadresult.h b/gui/threadresult.h index 64c26d03d0c..8c83fdaeb7b 100644 --- a/gui/threadresult.h +++ b/gui/threadresult.h @@ -137,10 +137,10 @@ public slots: * */ std::list mFiles; - std::list::const_iterator mItNextFile; + std::list::const_iterator mItNextFile{mFiles.cbegin()}; std::list mFileSettings; - std::list::const_iterator mItNextFileSettings; + std::list::const_iterator mItNextFileSettings{mFileSettings.cbegin()}; /** * @brief Max progress From ab79138599d8ec3c4da209cb88edf888917e9261 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 7 Jul 2025 09:35:12 +0200 Subject: [PATCH 4/4] Update testconstructors.cpp --- test/testconstructors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testconstructors.cpp b/test/testconstructors.cpp index cf13843dda0..8023990f629 100644 --- a/test/testconstructors.cpp +++ b/test/testconstructors.cpp @@ -3037,7 +3037,7 @@ class TestConstructors : public TestFixture { check("struct C {\n" // #13989 " C() = default;\n" " std::list::const_iterator it;\n" - "};\n", dinit(CheckOptions, $.inconclusive = true, $.s = &s)); + "};\n", dinit(CheckOptions, $.s = &s)); ASSERT_EQUALS("[test.cpp:2:5]: (warning) Member variable 'C::it' is not initialized in the constructor. [uninitMemberVar]\n", errout_str()); }