Skip to content

Commit bcc9742

Browse files
committed
Fix #14786 inconsistent unusedStructMember with std::unique_ptr
1 parent d1f7aec commit bcc9742

2 files changed

Lines changed: 7 additions & 1 deletion

File tree

lib/checkunusedvar.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1641,7 +1641,8 @@ void CheckUnusedVar::checkStructMemberUsage()
16411641

16421642
for (const Variable &var : scope.varlist) {
16431643
// only warn for variables without side effects
1644-
if (!(var.valueType() && var.valueType()->type >= ValueType::VOID) && !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;

test/testunusedvar.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2094,6 +2094,11 @@ class TestUnusedVar : public TestFixture {
20942094
" std::int32_t i;\n"
20952095
"};\n");
20962096
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());
20972102
}
20982103

20992104
void structmember_macro() {

0 commit comments

Comments
 (0)