Skip to content

Commit bb327be

Browse files
Fix #10591 FP unusedStructMember with value-initialized struct and typedef (danmar#3643)
1 parent 8df25ec commit bb327be

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

lib/tokenize.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3952,7 +3952,8 @@ void Tokenizer::setVarIdPass1()
39523952
} else
39533953
decl = false;
39543954
} else if (isCPP() && Token::Match(prev2, "%type% {") && Token::simpleMatch(tok2->link(), "} ;")) { // C++11 initialization style
3955-
if (Token::Match(prev2, "do|try|else") || Token::Match(prev2->tokAt(-2), "struct|class|:"))
3955+
if (tok2->link() != tok2->next() && // add value-initialized variable T x{};
3956+
(Token::Match(prev2, "do|try|else") || Token::Match(prev2->tokAt(-2), "struct|class|:")))
39563957
continue;
39573958
} else
39583959
decl = false;

test/testunusedvar.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class TestUnusedVar : public TestFixture {
6161
TEST_CASE(structmember15); // #3088 - #pragma pack(1)
6262
TEST_CASE(structmember_sizeof);
6363
TEST_CASE(structmember16); // #10485
64+
TEST_CASE(structmember17); // #10591
6465

6566
TEST_CASE(localvar1);
6667
TEST_CASE(localvar2);
@@ -1574,6 +1575,24 @@ class TestUnusedVar : public TestFixture {
15741575
ASSERT_EQUALS("[test.cpp:3]: (style) struct member 'S::E' is never used.\n", errout.str());
15751576
}
15761577

1578+
void structmember17() { // #10591
1579+
checkStructMemberUsage("struct tagT { int i; };\n"
1580+
"void f() {\n"
1581+
" struct tagT t{};\n"
1582+
" t.i = 0;\n" // <- used
1583+
" g(t);\n"
1584+
"};\n");
1585+
ASSERT_EQUALS("", errout.str());
1586+
1587+
checkStructMemberUsage("typedef struct tagT { int i; } typeT;\n"
1588+
"void f() {\n"
1589+
" struct typeT t{};\n"
1590+
" t.i = 0;\n" // <- used
1591+
" g(t);\n"
1592+
"};\n");
1593+
ASSERT_EQUALS("", errout.str());
1594+
}
1595+
15771596
void functionVariableUsage_(const char* file, int line, const char code[], const char filename[] = "test.cpp") {
15781597
// Clear the error buffer..
15791598
errout.str("");

0 commit comments

Comments
 (0)