Skip to content

Commit ade8582

Browse files
Fix #14582 FP uninitvar (array accessed via cast) (#8329)
1 parent fbf35b8 commit ade8582

2 files changed

Lines changed: 14 additions & 1 deletion

File tree

lib/astutils.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2636,7 +2636,8 @@ bool isVariableChanged(const Token *tok, int indirect, const Settings &settings,
26362636
while ((tok2->astParent() && tok2->astParent()->isUnaryOp("*")) ||
26372637
(Token::simpleMatch(tok2->astParent(), ".") && !Token::Match(tok2->astParent()->astParent(), "[(,]")) ||
26382638
(tok2->astParent() && tok2->astParent()->isUnaryOp("&") && Token::simpleMatch(tok2->astParent()->astParent(), ".") && tok2->astParent()->astParent()->originalName()=="->") ||
2639-
(Token::simpleMatch(tok2->astParent(), "[") && tok2 == tok2->astParent()->astOperand1())) {
2639+
(Token::simpleMatch(tok2->astParent(), "[") && tok2 == tok2->astParent()->astOperand1()) ||
2640+
(Token::simpleMatch(tok2->astParent(), "(") && tok2->astParent()->isCast())) {
26402641
if (tok2->astParent() && (tok2->astParent()->isUnaryOp("*") || (astIsLHS(tok2) && tok2->astParent()->originalName() == "->" && !hasOverloadedMemberAccess(tok2))))
26412642
derefs++;
26422643
if (derefs > indirect)

test/testuninitvar.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6696,6 +6696,18 @@ class TestUninitVar : public TestFixture {
66966696
" return [&]() { return j; }();\n"
66976697
"}\n");
66986698
ASSERT_EQUALS("[test.cpp:17:27]: (error) Uninitialized variable: j [uninitvar]\n", errout_str());
6699+
6700+
valueFlowUninit("int f() {\n" // #14582
6701+
" int a[1];\n"
6702+
" static_cast<int*>(a)[0] = 0;\n"
6703+
" return a[0];\n"
6704+
"}\n"
6705+
"int g() {\n"
6706+
" int a[1];\n"
6707+
" ((int*)a)[0] = 0;\n"
6708+
" return a[0];\n"
6709+
"}\n");
6710+
ASSERT_EQUALS("", errout_str());
66996711
}
67006712

67016713
void valueFlowUninitBreak() { // Do not show duplicate warnings about the same uninitialized value

0 commit comments

Comments
 (0)