File tree Expand file tree Collapse file tree 2 files changed +22
-3
lines changed
Expand file tree Collapse file tree 2 files changed +22
-3
lines changed Original file line number Diff line number Diff line change @@ -9296,17 +9296,24 @@ static Token* getVariableTokenAfterAttributes(Token* tok) {
92969296 Token *after = getTokenAfterAttributes (tok, true );
92979297
92989298 // check if after variable name
9299- if (Token::Match (after, " ;|= " )) {
9299+ if (Token::Match (after, " [;={] " )) {
93009300 Token *prev = tok->previous ();
93019301 while (Token::simpleMatch (prev, " ]" ))
93029302 prev = prev->link ()->previous ();
93039303 if (Token::Match (prev, " %type%" ))
93049304 vartok = prev;
93059305 }
93069306
9307+
93079308 // check if before variable name
9308- else if (Token::Match (after, " %type%" ))
9309- vartok = after;
9309+ else {
9310+ while (Token::Match (after->next (), " const|volatile|static|*|&|&&|%type%" )) {
9311+ after = after->next ();
9312+ }
9313+ if (Token::Match (after, " %name%" )) {
9314+ vartok = after;
9315+ }
9316+ }
93109317
93119318 return vartok;
93129319}
Original file line number Diff line number Diff line change @@ -72,6 +72,7 @@ class TestUnusedVar : public TestFixture {
7272 TEST_CASE (structmember27); // #13367
7373 TEST_CASE (structmember28);
7474 TEST_CASE (structmember29); // #14075
75+ TEST_CASE (structmember30); // #14131
7576 TEST_CASE (structmember_macro);
7677 TEST_CASE (structmember_template_argument); // #13887 - do not report that member used in template argument is unused
7778 TEST_CASE (classmember);
@@ -2023,6 +2024,17 @@ class TestUnusedVar : public TestFixture {
20232024 ASSERT_EQUALS (" [test.cpp:4:56]: (style) struct member 'S::storage' is never used. [unusedStructMember]\n " , errout_str ());
20242025 }
20252026
2027+ void structmember30 () { // #14131
2028+ checkStructMemberUsage (" struct S\n "
2029+ " {\n "
2030+ " private:\n "
2031+ " __attribute__((unused)) int i1{};\n "
2032+ " int __attribute__((unused)) i2{}; // no warning\n "
2033+ " int i3 __attribute__((unused)) {};\n "
2034+ " };\n " );
2035+ ASSERT_EQUALS (" " , errout_str ());
2036+ }
2037+
20262038 void structmember_macro () {
20272039 checkStructMemberUsageP (" #define S(n) struct n { int a, b, c; };\n "
20282040 " S(unused);\n " );
You can’t perform that action at this time.
0 commit comments