Skip to content

Commit 3bd5a03

Browse files
Fix #12176 false positive: unassignedVariable (#5656)
1 parent 6ac804d commit 3bd5a03

2 files changed

Lines changed: 12 additions & 1 deletion

File tree

lib/checkunusedvar.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1356,7 +1356,8 @@ void CheckUnusedVar::checkFunctionVariableUsage()
13561356
unassignedVariableError(usage._var->nameToken(), varname);
13571357
}
13581358
// variable has been read but not written
1359-
else if (!usage._write && !usage._allocateMemory && var && !var->isStlType() && !isEmptyType(var->type()))
1359+
else if (!usage._write && !usage._allocateMemory && var && !var->isStlType() && !isEmptyType(var->type()) &&
1360+
!(var->type() && var->type()->needInitialization == Type::NeedInitialization::False))
13601361
unassignedVariableError(usage._var->nameToken(), varname);
13611362
else if (!usage._var->isMaybeUnused() && !usage._modified && !usage._read && var) {
13621363
const Token* vnt = var->nameToken();

test/testunusedvar.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ class TestUnusedVar : public TestFixture {
140140
TEST_CASE(localvar67); // #9946
141141
TEST_CASE(localvar68);
142142
TEST_CASE(localvar69);
143+
TEST_CASE(localvar70);
143144
TEST_CASE(localvarloops); // loops
144145
TEST_CASE(localvaralias1);
145146
TEST_CASE(localvaralias2); // ticket #1637
@@ -3827,6 +3828,15 @@ class TestUnusedVar : public TestFixture {
38273828
ASSERT_EQUALS("", errout.str());
38283829
}
38293830

3831+
void localvar70() {
3832+
functionVariableUsage("struct S { int i = 0; };\n" // #12176
3833+
"void f(S s) {\n"
3834+
" S s1;\n"
3835+
" if (s == s1) {}\n"
3836+
"}\n");
3837+
ASSERT_EQUALS("", errout.str());
3838+
}
3839+
38303840
void localvarloops() {
38313841
// loops
38323842
functionVariableUsage("void fun(int c) {\n"

0 commit comments

Comments
 (0)