From a6863fc9859803a8b7407463d703986d981f6331 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 26 Oct 2026 15:49:06 +0100 Subject: [PATCH 1/5] Update checkuninitvar.cpp --- lib/checkuninitvar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 37d7a1ec0cd..4acf003af99 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1593,7 +1593,7 @@ void CheckUninitVarImpl::uninitvarError(const Token* tok, const ValueFlow::Value const std::string& varname = ltok ? ltok->expressionString() : "x"; ErrorPath errorPath = v.errorPath; errorPath.emplace_back(tok, ""); - auto severity = v.isKnown() ? Severity::error : Severity::warning; + auto severity = v.isKnown() && !v.conditional ? Severity::error : Severity::warning; auto certainty = v.isInconclusive() ? Certainty::inconclusive : Certainty::normal; if (v.subexpressions.empty()) { reportError(std::move(errorPath), From 815f861ab4ecbb66e496eb23ef929c49b4f431ee Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 26 Oct 2026 15:51:40 +0100 Subject: [PATCH 2/5] Update testuninitvar.cpp --- test/testuninitvar.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 57940b1b3fd..633fa5f5e84 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -3719,13 +3719,14 @@ class TestUninitVar : public TestFixture { #define valueFlowUninit(...) valueFlowUninit_(__FILE__, __LINE__, __VA_ARGS__) template - void valueFlowUninit_(const char* file, int line, const char (&code)[size], bool cpp = true) + void valueFlowUninit_(const char* file, int line, const char (&code)[size], bool cpp = true, const Settings* pSettings) { - SimpleTokenizer tokenizer(settings, *this, cpp); + const Settings& s = pSettings ? *pSettings : settings; + SimpleTokenizer tokenizer(s, *this, cpp); ASSERT_LOC(tokenizer.tokenize(code), file, line); // Check for redundant code.. - CheckUninitVarImpl checkuninitvar(&tokenizer, settings, *this); + CheckUninitVarImpl checkuninitvar(&tokenizer, s, *this); (checkuninitvar.valueFlowUninit)(); } @@ -7945,6 +7946,24 @@ class TestUninitVar : public TestFixture { ASSERT_EQUALS("", errout_str()); } + void valueFlowUninitErrorPath() + { + setMultiline(); + Settings s = settings; + s.templateLocation = "{file}:{line}:note:{info}\n"; + valueFlowUninit("void f(bool b) {\n" + " int i;\n" + " if (b)\n" + " return i;\n" + " i = 1;\n" + " return i;\n" + "}\n", &s); + ASSERT_EQUALS("[test.cpp:4:16]: warning: Uninitialized variable: i [uninitvar]\n" + "[test.cpp:3:9]: note: Assuming condition is true\n" + "[test.cpp:4:16]: note: Uninitialized variable: i\n", + errout_str()); + } + void uninitvar_memberfunction() { // # 8715 valueFlowUninit("struct C {\n" From a0b5d15f181c4d3089413b5ea0b70e260e3c83b9 Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Mon, 26 Oct 2026 18:23:06 +0100 Subject: [PATCH 3/5] Fix --- test/testuninitvar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 633fa5f5e84..e1b8d55312c 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -3719,7 +3719,7 @@ class TestUninitVar : public TestFixture { #define valueFlowUninit(...) valueFlowUninit_(__FILE__, __LINE__, __VA_ARGS__) template - void valueFlowUninit_(const char* file, int line, const char (&code)[size], bool cpp = true, const Settings* pSettings) + void valueFlowUninit_(const char* file, int line, const char (&code)[size], bool cpp = true, const Settings* pSettings = nullptr) { const Settings& s = pSettings ? *pSettings : settings; SimpleTokenizer tokenizer(s, *this, cpp); From 699ea55ace2ae2213cc24ccdf7592a9d59fa286b Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Mon, 26 Oct 2026 19:01:49 +0100 Subject: [PATCH 4/5] Undo --- test/testuninitvar.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index e1b8d55312c..4a883e3d86f 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -3719,14 +3719,13 @@ class TestUninitVar : public TestFixture { #define valueFlowUninit(...) valueFlowUninit_(__FILE__, __LINE__, __VA_ARGS__) template - void valueFlowUninit_(const char* file, int line, const char (&code)[size], bool cpp = true, const Settings* pSettings = nullptr) + void valueFlowUninit_(const char* file, int line, const char (&code)[size], bool cpp = true) { - const Settings& s = pSettings ? *pSettings : settings; - SimpleTokenizer tokenizer(s, *this, cpp); + SimpleTokenizer tokenizer(settings, *this, cpp); ASSERT_LOC(tokenizer.tokenize(code), file, line); // Check for redundant code.. - CheckUninitVarImpl checkuninitvar(&tokenizer, s, *this); + CheckUninitVarImpl checkuninitvar(&tokenizer, settings, *this); (checkuninitvar.valueFlowUninit)(); } @@ -7949,15 +7948,14 @@ class TestUninitVar : public TestFixture { void valueFlowUninitErrorPath() { setMultiline(); - Settings s = settings; - s.templateLocation = "{file}:{line}:note:{info}\n"; + valueFlowUninit("void f(bool b) {\n" " int i;\n" " if (b)\n" " return i;\n" " i = 1;\n" " return i;\n" - "}\n", &s); + "}\n"); ASSERT_EQUALS("[test.cpp:4:16]: warning: Uninitialized variable: i [uninitvar]\n" "[test.cpp:3:9]: note: Assuming condition is true\n" "[test.cpp:4:16]: note: Uninitialized variable: i\n", From fe389d3ea5e15713965df387b2e36fb7307a0e7c Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Mon, 26 Oct 2026 19:39:33 +0100 Subject: [PATCH 5/5] Fix --- test/testuninitvar.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 4a883e3d86f..a889d126cd5 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -95,6 +95,7 @@ class TestUninitVar : public TestFixture { TEST_CASE(valueFlowUninitBreak); TEST_CASE(valueFlowUninitStructMembers); TEST_CASE(valueFlowUninitForLoop); + TEST_CASE(valueFlowUninitErrorPath); TEST_CASE(uninitvar_ipa); TEST_CASE(uninitvar_memberfunction); TEST_CASE(uninitvar_nonmember); // crash in ycmd test