diff --git a/lib/checkunusedvar.cpp b/lib/checkunusedvar.cpp index 76371f860..b8b6e2e0d 100644 --- a/lib/checkunusedvar.cpp +++ b/lib/checkunusedvar.cpp @@ -1265,6 +1265,11 @@ void CheckUnusedVar::checkStructMemberUsage() used = true; break; } + const Function* function = structVarTok->function(); + if (function && function->retType && function->retType->name() == structname) { + used = true; + break; + } } if (!used) { diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index b6c5fefc0..5040e8881 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -250,6 +250,21 @@ private: " a->a;\n" "}"); ASSERT_EQUALS("[test.cpp:7]: (style) struct member 'B::a' is never used.\n", errout.str()); + + checkStructMemberUsage("struct A\n" + "{\n" + " int a;\n" + "};\n" + "struct B\n" + "{\n" + " int a;\n" + "};\n" + "A& bar();\n" + "void foo()\n" + "{\n" + " bar().a;\n" + "}"); + ASSERT_EQUALS("[test.cpp:7]: (style) struct member 'B::a' is never used.\n", errout.str()); } void structmember2() {