Skip to content

Commit 0f47948

Browse files
Fix #11577 FN unusedStructMember when casting address (regression) (#4816)
1 parent 115f17c commit 0f47948

2 files changed

Lines changed: 9 additions & 16 deletions

File tree

lib/checkunusedvar.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1479,20 +1479,6 @@ void CheckUnusedVar::checkStructMemberUsage()
14791479
bailout = true;
14801480
break;
14811481
}
1482-
if (var && (var->typeStartToken()->str() == scope.className || var->typeEndToken()->str() == scope.className)) {
1483-
const std::string addressPattern("!!" + scope.className + " & " + var->name()); // cast from struct
1484-
const Token* addrTok = scope.bodyEnd;
1485-
do {
1486-
addrTok = Token::findmatch(addrTok, addressPattern.c_str());
1487-
if ((addrTok && addrTok->str() == ")" && addrTok->link()->isCast()) || isCPPCast(addrTok)) {
1488-
bailout = true;
1489-
break;
1490-
}
1491-
if (addrTok)
1492-
addrTok = addrTok->next();
1493-
} while (addrTok);
1494-
}
1495-
14961482
if (bailout)
14971483
break;
14981484
}

test/testunusedvar.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,15 +1677,22 @@ class TestUnusedVar : public TestFixture {
16771677
" uint8_t* p = (uint8_t*)&s;\n"
16781678
" return p[10];\n"
16791679
"};\n");
1680-
ASSERT_EQUALS("", errout.str());
1680+
ASSERT_EQUALS("[test.cpp:1]: (style) struct member 'S::padding' is never used.\n", errout.str());
16811681

16821682
checkStructMemberUsage("struct S { uint8_t padding[500]; };\n"
16831683
"uint8_t f(const S& s) {\n"
16841684
" std::cout << &s;\n"
16851685
" auto p = reinterpret_cast<const uint8_t*>(&s);\n"
16861686
" return p[10];\n"
16871687
"};\n");
1688-
ASSERT_EQUALS("", errout.str());
1688+
ASSERT_EQUALS("[test.cpp:1]: (style) struct member 'S::padding' is never used.\n", errout.str());
1689+
1690+
checkStructMemberUsage("struct S { int i, j; };\n" // #11577
1691+
"void f(S s) {\n"
1692+
" void* p = (void*)&s;\n"
1693+
" if (s.i) {}\n"
1694+
"}\n");
1695+
ASSERT_EQUALS("[test.cpp:1]: (style) struct member 'S::j' is never used.\n", errout.str());
16891696
}
16901697

16911698
void structmember19() {

0 commit comments

Comments
 (0)