From 69037c9ded1f02f48bf1b06a4d70ca33ba899fe4 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Thu, 21 Mar 2024 20:36:49 +0100 Subject: [PATCH] Partial fix for #12529 FN unreadVariable/unusedVariable with library type (#6170) --- lib/checkunusedvar.cpp | 5 ++++- test/cfg/wxwidgets.cpp | 14 +++++++------- test/testunusedvar.cpp | 4 ++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/checkunusedvar.cpp b/lib/checkunusedvar.cpp index 7ab85367eb5..15f989d8a99 100644 --- a/lib/checkunusedvar.cpp +++ b/lib/checkunusedvar.cpp @@ -1201,8 +1201,9 @@ void CheckUnusedVar::checkFunctionVariableUsage() if (!isAssignment && !isInitialization && !isIncrementOrDecrement) continue; + bool isTrivialInit = false; if (isInitialization && Token::Match(tok, "%var% { }")) // don't warn for trivial initialization - continue; + isTrivialInit = true; if (isIncrementOrDecrement && tok->astParent() && precedes(tok, tok->astOperand1())) continue; @@ -1308,6 +1309,8 @@ void CheckUnusedVar::checkFunctionVariableUsage() reportLibraryCfgError(tok, bailoutTypeName); continue; } + if (isTrivialInit && findExpressionChanged(expr, start, scopeEnd, mSettings)) + continue; // warn if (!expr->variable() || !expr->variable()->isMaybeUnused()) diff --git a/test/cfg/wxwidgets.cpp b/test/cfg/wxwidgets.cpp index 5481edee8d3..0852aaba996 100644 --- a/test/cfg/wxwidgets.cpp +++ b/test/cfg/wxwidgets.cpp @@ -87,7 +87,7 @@ void unreadVariable_wxTimeSpan(const long x, const wxLongLong y) { // cppcheck-suppress unusedVariable wxTimeSpan a; - // TODO cppcheck-suppress unreadVariable + // cppcheck-suppress unreadVariable wxTimeSpan b{}; // cppcheck-suppress unreadVariable wxTimeSpan c{x}; @@ -109,7 +109,7 @@ void unreadVariable_wxPosition(const int x) { // cppcheck-suppress unusedVariable wxPosition a; - // TODO cppcheck-suppress unreadVariable + // cppcheck-suppress unreadVariable wxPosition b{}; // cppcheck-suppress unreadVariable wxPosition c{x,x}; @@ -129,7 +129,7 @@ void unreadVariable_wxRegion(const wxCoord x, const wxPoint &pt, const wxRect &r { // cppcheck-suppress unusedVariable wxRegion a; - // TODO cppcheck-suppress unreadVariable + // cppcheck-suppress unreadVariable wxRegion b{}; // cppcheck-suppress unreadVariable wxRegion c{x,x,x,x}; @@ -165,7 +165,7 @@ void unreadVariable_wxSize(const wxSize &s) { // cppcheck-suppress unusedVariable wxSize a; - // TODO cppcheck-suppress unreadVariable + // cppcheck-suppress unreadVariable wxSize b{}; // cppcheck-suppress unreadVariable wxSize c{4, 2}; @@ -179,7 +179,7 @@ void unreadVariable_wxPoint(const wxRealPoint &rp, const int x, const int y) { // cppcheck-suppress unusedVariable wxPoint a; - // TODO cppcheck-suppress unreadVariable + // cppcheck-suppress unreadVariable wxPoint b{}; // cppcheck-suppress unreadVariable wxPoint c{4, 2}; @@ -197,7 +197,7 @@ void unreadVariable_wxRealPoint(const wxPoint &pt, const double x, const double { // cppcheck-suppress unusedVariable wxRealPoint a; - // TODO cppcheck-suppress unreadVariable + // cppcheck-suppress unreadVariable wxRealPoint b{}; // cppcheck-suppress unreadVariable wxRealPoint c{4.0, 2.0}; @@ -215,7 +215,7 @@ void unreadVariable_wxRect(const int x, const wxPoint &pt, const wxSize &sz) { // cppcheck-suppress unusedVariable wxRect a; - // TODO cppcheck-suppress unreadVariable + // cppcheck-suppress unreadVariable wxRect b{}; // cppcheck-suppress unreadVariable wxRect c{x,x,x,x}; diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 749dd206b6b..8f4a4969418 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -3778,7 +3778,7 @@ class TestUnusedVar : public TestFixture { functionVariableUsage("void f() {\n" " S* s{};\n" "}\n"); - TODO_ASSERT_EQUALS("[test.cpp:2]: (style) Variable 's' is assigned a value that is never used.\n", "", errout_str()); + ASSERT_EQUALS("[test.cpp:2]: (style) Variable 's' is assigned a value that is never used.\n", errout_str()); functionVariableUsage("int f() {\n" " int i = 0, j = 1;\n" @@ -5137,7 +5137,7 @@ class TestUnusedVar : public TestFixture { " b = false;\n" " if (*p) {}\n" "}\n"); - ASSERT_EQUALS("", errout_str()); + ASSERT_EQUALS("[test.cpp:4]: (style) Variable 'j' is assigned a value that is never used.\n", errout_str()); } void localvaralias22() { // #11139