From c7810db1a7fc0284983e603ee89d18b086f4f808 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Tue, 20 Jan 2026 17:12:32 +0100 Subject: [PATCH 1/4] Update astutils.cpp --- lib/astutils.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/astutils.cpp b/lib/astutils.cpp index c91f41d9651..3eff26083b5 100644 --- a/lib/astutils.cpp +++ b/lib/astutils.cpp @@ -2006,9 +2006,7 @@ bool isOppositeExpression(const Token * const tok1, const Token * const tok2, co static bool functionModifiesArguments(const Function* f) { return std::any_of(f->argumentList.cbegin(), f->argumentList.cend(), [](const Variable& var) { - if (var.isReference() || var.isPointer()) - return !var.isConst(); - return true; + return var.isReference() && !var.isConst(); }); } @@ -2089,7 +2087,7 @@ bool isConstFunctionCall(const Token* ftok, const Library& library) return false; }); } - return true; + return false; } bool isConstExpression(const Token *tok, const Library& library) From ba465f5da6f12ff6f18f49aacfe44478cdc84280 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Tue, 20 Jan 2026 17:15:33 +0100 Subject: [PATCH 2/4] Update testcondition.cpp --- test/testcondition.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/testcondition.cpp b/test/testcondition.cpp index ffeca5c5be7..9daa6981c6b 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -110,6 +110,7 @@ class TestCondition : public TestFixture { TEST_CASE(alwaysTrueContainer); TEST_CASE(alwaysTrueLoop); TEST_CASE(alwaysTrueTryCatch); + TEST_CASE(alwaysTrueSideEffect); TEST_CASE(multiConditionAlwaysTrue); TEST_CASE(duplicateCondition); @@ -5590,6 +5591,18 @@ class TestCondition : public TestFixture { ASSERT_EQUALS("", errout_str()); } + void alwaysTrueSideEffect() { + check("bool check(const char* const);\n" // #14416 + "void create(const char*);\n" + "void f(const char* n) {\n" + " if (!check(n)) {\n" + " create(n);\n" + " if (check(n)) {}\n" + " }\n" + "}\n"); + ASSERT_EQUALS("", errout_str()); + } + void multiConditionAlwaysTrue() { check("void f() {\n" " int val = 0;\n" From 29ef8faa59d71031d32d8b7c7a31b0efadab7f3c Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Tue, 20 Jan 2026 20:47:04 +0100 Subject: [PATCH 3/4] Fix, suppress --- lib/checksizeof.cpp | 2 +- lib/symboldatabase.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/checksizeof.cpp b/lib/checksizeof.cpp index 15a1caf1a8e..eead36c9f67 100644 --- a/lib/checksizeof.cpp +++ b/lib/checksizeof.cpp @@ -139,7 +139,7 @@ void CheckSizeof::checkSizeofForPointerSize() variable = tok; else if (tok->strAt(1) == ")" && Token::Match(tok->linkAt(1)->tokAt(-2), "%var% =")) variable = tok->linkAt(1)->tokAt(-2); - else if (tok->link() && Token::Match(tok, "> ( %name% (") && mSettings->library.getAllocFuncInfo(tok->tokAt(2)) && Token::Match(tok->link()->tokAt(-3), "%var% =")) + else if (tok->link() && Token::Match(tok, "> ( %name% (") && Token::Match(tok->link()->tokAt(-3), "%var% =")) variable = tok->link()->tokAt(-3); tokSize = tok->tokAt(4); tokFunc = tok->tokAt(2); diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index b6528d9a9e6..95194631142 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -5895,7 +5895,7 @@ static void checkVariableCallMatch(const Variable* callarg, const Variable* func callarg->typeStartToken()->isLong() == funcarg->typeStartToken()->isLong()) { same++; } else if (callarg->isArrayOrPointer()) { - if (ptrequals && constEquals && funcarg->typeStartToken()->str() == "void") + if (ptrequals && constEquals && funcarg->typeStartToken()->str() == "void") // cppcheck-suppress knownConditionTrueFalse (#14418) fallback1++; else if (constEquals && funcarg->isStlStringType() && Token::Match(callarg->typeStartToken(), "char|wchar_t")) fallback2++; From 98f1463309077620c64b14e562137b49c6d2e24b Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Tue, 20 Jan 2026 21:46:34 +0100 Subject: [PATCH 4/4] Comment --- lib/symboldatabase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 95194631142..ef675110ded 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -5895,7 +5895,7 @@ static void checkVariableCallMatch(const Variable* callarg, const Variable* func callarg->typeStartToken()->isLong() == funcarg->typeStartToken()->isLong()) { same++; } else if (callarg->isArrayOrPointer()) { - if (ptrequals && constEquals && funcarg->typeStartToken()->str() == "void") // cppcheck-suppress knownConditionTrueFalse (#14418) + if (ptrequals && constEquals && funcarg->typeStartToken()->str() == "void") // cppcheck-suppress knownConditionTrueFalse // #14418 fallback1++; else if (constEquals && funcarg->isStlStringType() && Token::Match(callarg->typeStartToken(), "char|wchar_t")) fallback2++;