File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -1641,7 +1641,8 @@ void CheckUnusedVarImpl::checkStructMemberUsage()
16411641
16421642 for (const Variable &var : scope.varlist ) {
16431643 // only warn for variables without side effects
1644- if (!var.typeStartToken ()->isStandardType () && !var.isPointer () && !astIsContainer (var.nameToken ()) && !mTokenizer ->getSymbolDatabase ()->isRecordTypeWithoutSideEffects (var.type ()))
1644+ if (!(var.valueType () && var.valueType ()->type >= ValueType::VOID) && !var.isPointer () && !astIsContainer (var.nameToken ()) &&
1645+ !astIsSmartPointer (var.nameToken ()) && !mTokenizer ->getSymbolDatabase ()->isRecordTypeWithoutSideEffects (var.type ()))
16451646 continue ;
16461647 if (isInherited && !var.isPrivate ())
16471648 continue ;
Original file line number Diff line number Diff line change @@ -79,6 +79,7 @@ class TestUnusedVar : public TestFixture {
7979 TEST_CASE (structmember31); // #14130
8080 TEST_CASE (structmember32); // #14483
8181 TEST_CASE (structmember33);
82+ TEST_CASE (structmember34);
8283 TEST_CASE (structmember_macro);
8384 TEST_CASE (structmember_template_argument); // #13887 - do not report that member used in template argument is unused
8485 TEST_CASE (classmember);
@@ -2088,6 +2089,18 @@ class TestUnusedVar : public TestFixture {
20882089 ASSERT_EQUALS (" [test.cpp:2:23]: (style) struct member 'S::mp' is never used. [unusedStructMember]\n " , errout_str ());
20892090 }
20902091
2092+ void structmember34 () {
2093+ checkStructMemberUsage (" struct S {\n " // #14785
2094+ " std::int32_t i;\n "
2095+ " };\n " );
2096+ ASSERT_EQUALS (" [test.cpp:2:16]: (style) struct member 'S::i' is never used. [unusedStructMember]\n " , errout_str ());
2097+
2098+ checkStructMemberUsage (" struct S {\n " // #14786
2099+ " std::unique_ptr<int> p;\n "
2100+ " };\n " );
2101+ ASSERT_EQUALS (" [test.cpp:2:24]: (style) struct member 'S::p' is never used. [unusedStructMember]\n " , errout_str ());
2102+ }
2103+
20912104 void structmember_macro () {
20922105 checkStructMemberUsageP (" #define S(n) struct n { int a, b, c; };\n "
20932106 " S(unused);\n " );
You can’t perform that action at this time.
0 commit comments