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()
1549
1549
use = true ;
1550
1550
break ;
1551
1551
}
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
+ }
1552
1560
if (tok->variable () != &var)
1553
1561
continue ;
1554
1562
if (tok != var.nameToken ()) {
Original file line number Diff line number Diff line change @@ -70,6 +70,7 @@ class TestUnusedVar : public TestFixture {
70
70
TEST_CASE (structmember23);
71
71
TEST_CASE (structmember24); // #10847
72
72
TEST_CASE (structmember25);
73
+ TEST_CASE (structmember26); // #13345
73
74
TEST_CASE (structmember_macro);
74
75
TEST_CASE (classmember);
75
76
@@ -1962,6 +1963,14 @@ class TestUnusedVar : public TestFixture {
1962
1963
errout_str ());
1963
1964
}
1964
1965
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
+
1965
1974
void structmember_macro () {
1966
1975
checkStructMemberUsageP (" #define S(n) struct n { int a, b, c; };\n "
1967
1976
" S(unused);\n " );
You can’t perform that action at this time.
0 commit comments