From 6d22d6a8aee31c91057cf658c197e59e2d8c784c Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Tue, 14 Jun 2022 09:55:22 +0200 Subject: [PATCH] Fix FP unusedVar with side effects in destructor (#4212) --- lib/checkunusedvar.cpp | 2 +- test/testunusedvar.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/checkunusedvar.cpp b/lib/checkunusedvar.cpp index c057c38df..0b30b0376 100644 --- a/lib/checkunusedvar.cpp +++ b/lib/checkunusedvar.cpp @@ -1535,7 +1535,7 @@ bool CheckUnusedVar::isRecordTypeWithoutSideEffects(const Type* type) // Non-empty constructors => possible side effects for (const Function& f : type->classScope->functionList) { - if (!f.isConstructor()) + if (!f.isConstructor() && !f.isDestructor()) continue; if (f.argDef && Token::simpleMatch(f.argDef->link(), ") =")) continue; // ignore default/deleted constructors diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 2ddb7c2f6..4c22dd5e3 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -536,6 +536,16 @@ private: " F f;\n" "}"); ASSERT_EQUALS("", errout.str()); + + functionVariableUsage( + "struct S {\n" + " static void f() { std::cout << \"f()\"; }\n" + " ~S() { f(); }\n" + "};\n" + "void g() {\n" + " S s;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void cleanFunction() {