File tree Expand file tree Collapse file tree 2 files changed +17
-0
lines changed
Expand file tree Collapse file tree 2 files changed +17
-0
lines changed Original file line number Diff line number Diff line change @@ -1549,6 +1549,14 @@ void CheckUnusedVar::checkStructMemberUsage()
15491549 use = true ;
15501550 break ;
15511551 }
1552+ // Member referenced in offsetof
1553+ if (Token::Match (tok, (" offsetof ( struct| " + scope.className + " , %name%" ).c_str ())) {
1554+ tok = tok->astSibling ()->astOperand2 ();
1555+ if (tok->str () == var.name ()) {
1556+ use = true ;
1557+ break ;
1558+ }
1559+ }
15521560 if (tok->variable () != &var)
15531561 continue ;
15541562 if (tok != var.nameToken ()) {
Original file line number Diff line number Diff line change @@ -70,6 +70,7 @@ class TestUnusedVar : public TestFixture {
7070 TEST_CASE (structmember23);
7171 TEST_CASE (structmember24); // #10847
7272 TEST_CASE (structmember25);
73+ TEST_CASE (structmember26); // #13345
7374 TEST_CASE (structmember_macro);
7475 TEST_CASE (classmember);
7576
@@ -1962,6 +1963,14 @@ class TestUnusedVar : public TestFixture {
19621963 errout_str ());
19631964 }
19641965
1966+ void structmember26 () { // #13345
1967+ checkStructMemberUsage (" struct foobar {\n "
1968+ " char unused;\n "
1969+ " };\n "
1970+ " size_t offset_unused = offsetof(struct foobar, unused);\n " );
1971+ ASSERT_EQUALS (" " , errout_str ());
1972+ }
1973+
19651974 void structmember_macro () {
19661975 checkStructMemberUsageP (" #define S(n) struct n { int a, b, c; };\n "
19671976 " S(unused);\n " );
You can’t perform that action at this time.
0 commit comments