From 477f2b9c6cd40ea0b0460a4120f070eacd7ed777 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Thu, 12 Mar 2026 10:33:57 +0100 Subject: [PATCH 1/2] Update testuninitvar.cpp --- test/testuninitvar.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 62be497638a..ecb467524c3 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -6696,6 +6696,18 @@ class TestUninitVar : public TestFixture { " return [&]() { return j; }();\n" "}\n"); ASSERT_EQUALS("[test.cpp:17:27]: (error) Uninitialized variable: j [uninitvar]\n", errout_str()); + + valueFlowUninit("int f() {\n" // #14582 + " int a[1];\n" + " static_cast(a)[0] = 0;\n" + " return a[0];\n" + "}\n" + "int g() {\n" + " int a[1];\n" + " ((int*)a)[0] = 0;\n" + " return a[0];\n" + "}\n"); + ASSERT_EQUALS("", errout_str()); } void valueFlowUninitBreak() { // Do not show duplicate warnings about the same uninitialized value From c25f28583d7a49147383a030b371d2d24eb29d78 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Thu, 12 Mar 2026 10:34:42 +0100 Subject: [PATCH 2/2] Update astutils.cpp --- lib/astutils.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/astutils.cpp b/lib/astutils.cpp index 2d53ef0b0c1..aeee7a372e1 100644 --- a/lib/astutils.cpp +++ b/lib/astutils.cpp @@ -2636,7 +2636,8 @@ bool isVariableChanged(const Token *tok, int indirect, const Settings &settings, while ((tok2->astParent() && tok2->astParent()->isUnaryOp("*")) || (Token::simpleMatch(tok2->astParent(), ".") && !Token::Match(tok2->astParent()->astParent(), "[(,]")) || (tok2->astParent() && tok2->astParent()->isUnaryOp("&") && Token::simpleMatch(tok2->astParent()->astParent(), ".") && tok2->astParent()->astParent()->originalName()=="->") || - (Token::simpleMatch(tok2->astParent(), "[") && tok2 == tok2->astParent()->astOperand1())) { + (Token::simpleMatch(tok2->astParent(), "[") && tok2 == tok2->astParent()->astOperand1()) || + (Token::simpleMatch(tok2->astParent(), "(") && tok2->astParent()->isCast())) { if (tok2->astParent() && (tok2->astParent()->isUnaryOp("*") || (astIsLHS(tok2) && tok2->astParent()->originalName() == "->" && !hasOverloadedMemberAccess(tok2)))) derefs++; if (derefs > indirect)