From c23aef989a57abe703d4c9e0ed16df5d235bdbdd Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 10:18:22 +0200
Subject: [PATCH 01/16] Update astutils.cpp
---
lib/astutils.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/lib/astutils.cpp b/lib/astutils.cpp
index f16144310ac..37e815ff2a0 100644
--- a/lib/astutils.cpp
+++ b/lib/astutils.cpp
@@ -3471,6 +3471,9 @@ static ExprUsage getFunctionUsage(const Token* tok, int indirect, const Settings
const bool isuninitbad = settings.library.isuninitargbad(ftok, argnr + 1, indirect, &hasIndirect);
if (isuninitbad && (!addressOf || isnullbad))
return ExprUsage::Used;
+ const Library::ArgumentChecks::Direction argDirection = settings.library.getArgDirection(tok, argnr + 1, indirect);
+ if (argDirection == Library::ArgumentChecks::Direction::DIR_IN)
+ return ExprUsage::Used;
}
return ExprUsage::Inconclusive;
}
From 4930d4c162fdea06b0df0d375d5f1b73c5b4633b Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 10:19:36 +0200
Subject: [PATCH 02/16] Update posix.c
---
test/cfg/posix.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/cfg/posix.c b/test/cfg/posix.c
index 2e53d171dec..61588b670bd 100644
--- a/test/cfg/posix.c
+++ b/test/cfg/posix.c
@@ -1408,7 +1408,7 @@ void timet_h(const struct timespec* ptp1)
clock_settime(clk_id2, ptp1);
struct timespec tp;
- // FIXME cppcheck-suppress uninitvar
+ // cppcheck-suppress uninitvar
clock_settime(CLOCK_REALTIME, &tp); // #6577 - false negative
// cppcheck-suppress uninitvar
clock_settime(clk_id3, &tp);
From 520f6152490d2f69a7a3807983f6fc22c0b10fa0 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 10:27:10 +0200
Subject: [PATCH 03/16] Update astutils.cpp
---
lib/astutils.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/astutils.cpp b/lib/astutils.cpp
index 37e815ff2a0..bed7eca56b2 100644
--- a/lib/astutils.cpp
+++ b/lib/astutils.cpp
@@ -3471,7 +3471,7 @@ static ExprUsage getFunctionUsage(const Token* tok, int indirect, const Settings
const bool isuninitbad = settings.library.isuninitargbad(ftok, argnr + 1, indirect, &hasIndirect);
if (isuninitbad && (!addressOf || isnullbad))
return ExprUsage::Used;
- const Library::ArgumentChecks::Direction argDirection = settings.library.getArgDirection(tok, argnr + 1, indirect);
+ const Library::ArgumentChecks::Direction argDirection = settings.library.getArgDirection(ftok, argnr + 1, indirect);
if (argDirection == Library::ArgumentChecks::Direction::DIR_IN)
return ExprUsage::Used;
}
From dd7991ddac52cd74340f05e7a044df203e1b97ac Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 10:43:43 +0200
Subject: [PATCH 04/16] Update gtk.cfg
---
cfg/gtk.cfg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cfg/gtk.cfg b/cfg/gtk.cfg
index 4dd9700c62c..9b89a069903 100644
--- a/cfg/gtk.cfg
+++ b/cfg/gtk.cfg
@@ -8761,7 +8761,7 @@
false
-
+
From 3558d71cd6d6a8e379457bd5f16b923f0bd30a49 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 11:06:14 +0200
Subject: [PATCH 05/16] Update posix.c [skip ci]
---
test/cfg/posix.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/cfg/posix.c b/test/cfg/posix.c
index 61588b670bd..52607fe3a98 100644
--- a/test/cfg/posix.c
+++ b/test/cfg/posix.c
@@ -1312,7 +1312,7 @@ void uninitvar(int fd)
pthread_mutex_t mutex, mutex1, mutex2, mutex3;
// cppcheck-suppress uninitvar
write(x1,"ab",2);
- // TODO cppcheck-suppress uninitvar
+ // cppcheck-suppress uninitvar
write(fd,buf,2); // #6325
// cppcheck-suppress uninitvar
write(fd,"ab",x2);
From 95381ebaa44fbde5162ec99c3e346448771cb170 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 11:07:36 +0200
Subject: [PATCH 06/16] Update std.cfg
---
cfg/std.cfg | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cfg/std.cfg b/cfg/std.cfg
index 70e9cc17746..e7dff21da96 100644
--- a/cfg/std.cfg
+++ b/cfg/std.cfg
@@ -8751,7 +8751,7 @@ initializer list (7) string& replace (const_iterator i1, const_iterator i2, init
false
-
+
@@ -8759,7 +8759,7 @@ initializer list (7) string& replace (const_iterator i1, const_iterator i2, init
false
-
+
From c0f6224b3d6f70f2cab4173d5b693de5811b9a89 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 11:29:39 +0200
Subject: [PATCH 07/16] Update std.cpp
---
test/cfg/std.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/cfg/std.cpp b/test/cfg/std.cpp
index 7e406ca2187..9dac4fa314d 100644
--- a/test/cfg/std.cpp
+++ b/test/cfg/std.cpp
@@ -5003,7 +5003,7 @@ void beginEnd()
//cppcheck-suppress ignoredReturnValue
std::crend(v);
- // cppcheck-suppress constVariable
+ // TODO cppcheck-suppress constVariable
int arr[4];
//cppcheck-suppress ignoredReturnValue
From c76820039eeee442faa5e25f0cbb22c180bea9b6 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 13:48:17 +0200
Subject: [PATCH 08/16] Update std.cpp
---
test/cfg/std.cpp | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/test/cfg/std.cpp b/test/cfg/std.cpp
index 9dac4fa314d..31503e6bd85 100644
--- a/test/cfg/std.cpp
+++ b/test/cfg/std.cpp
@@ -5025,6 +5025,32 @@ void beginEnd()
std::crend(arr);
}
+struct S_constParameter_std_begin { // #11617
+ int a[2];
+};
+
+struct T_constParameter_std_begin {
+ std::vector v;
+};
+
+void f(S_constParameter_std_begin& s) {
+ std::for_each(std::begin(s.a), std::end(s.a), [](auto& i) { ++i; });
+}
+
+// cppcheck-suppress constParameterReference - FP
+void f(T_constParameter_std_begin& t) {
+ std::for_each(std::begin(t.v), std::end(t.v), [](auto& i) { ++i; });
+}
+
+void g_constVariable_std_begin(int* p) { *p = 0; }
+
+int f_constVariable_std_begin() {
+ int arr[1];
+ g_constVariable_std_begin(std::begin(arr));
+ *std::begin(arr) = 1;
+ return arr[0];
+}
+
void smartPtr_get()
{
std::unique_ptr p;
From d9476d60160f05c5588728de4d0b75f5b3914698 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 14:06:45 +0200
Subject: [PATCH 09/16] Update std.cpp
---
test/cfg/std.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/cfg/std.cpp b/test/cfg/std.cpp
index 31503e6bd85..a3c66724acb 100644
--- a/test/cfg/std.cpp
+++ b/test/cfg/std.cpp
@@ -5034,12 +5034,12 @@ struct T_constParameter_std_begin {
};
void f(S_constParameter_std_begin& s) {
- std::for_each(std::begin(s.a), std::end(s.a), [](auto& i) { ++i; });
+ std::for_each(std::begin(s.a), std::end(s.a), [](int& i) { ++i; });
}
// cppcheck-suppress constParameterReference - FP
void f(T_constParameter_std_begin& t) {
- std::for_each(std::begin(t.v), std::end(t.v), [](auto& i) { ++i; });
+ std::for_each(std::begin(t.v), std::end(t.v), [](int& i) { ++i; });
}
void g_constVariable_std_begin(int* p) { *p = 0; }
From 391ccbc24c52c73ae036e898c174c89c0910a6bf Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 15:39:26 +0200
Subject: [PATCH 10/16] Update std.cpp
---
test/cfg/std.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/test/cfg/std.cpp b/test/cfg/std.cpp
index a3c66724acb..ea7b207937b 100644
--- a/test/cfg/std.cpp
+++ b/test/cfg/std.cpp
@@ -5037,7 +5037,6 @@ void f(S_constParameter_std_begin& s) {
std::for_each(std::begin(s.a), std::end(s.a), [](int& i) { ++i; });
}
-// cppcheck-suppress constParameterReference - FP
void f(T_constParameter_std_begin& t) {
std::for_each(std::begin(t.v), std::end(t.v), [](int& i) { ++i; });
}
From a1bbdf50c489e48a1dec32fdfd74349cba0de955 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 16:00:50 +0200
Subject: [PATCH 11/16] Update symboldatabase.cpp
---
lib/symboldatabase.cpp | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp
index 76c49b2c833..0d1ea8f150b 100644
--- a/lib/symboldatabase.cpp
+++ b/lib/symboldatabase.cpp
@@ -8036,9 +8036,13 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to
}
//Is iterator fetching function called?
} else if (Token::simpleMatch(tok->astOperand1(), "::") &&
- tok->astOperand2() &&
- tok->astOperand2()->isVariable()) {
- const auto* const paramVariable = tok->astOperand2()->variable();
+ tok->astOperand2()) {
+ const Token* varTok = tok->astOperand2();
+ while (Token::simpleMatch(varTok, "["))
+ varTok = varTok->astOperand1();
+ if (Token::simpleMatch(varTok, "."))
+ varTok = varTok->astOperand2();
+ const auto* const paramVariable = varTok->variable();
if (!paramVariable ||
!paramVariable->valueType() ||
!paramVariable->valueType()->container) {
From ccd452af4efb2ca00469840c78b248d5855f3238 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 16:04:40 +0200
Subject: [PATCH 12/16] Update std.cpp
---
test/cfg/std.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/test/cfg/std.cpp b/test/cfg/std.cpp
index ea7b207937b..1224c6b57ac 100644
--- a/test/cfg/std.cpp
+++ b/test/cfg/std.cpp
@@ -5033,6 +5033,10 @@ struct T_constParameter_std_begin {
std::vector v;
};
+struct U_constParameter_std_begin {
+ std::vector v[1][1];
+};
+
void f(S_constParameter_std_begin& s) {
std::for_each(std::begin(s.a), std::end(s.a), [](int& i) { ++i; });
}
@@ -5041,6 +5045,10 @@ void f(T_constParameter_std_begin& t) {
std::for_each(std::begin(t.v), std::end(t.v), [](int& i) { ++i; });
}
+void f(U_constParameter_std_begin& u) {
+ std::for_each(std::begin(u.v[0][0]), std::end(u.v[0][0]), [](int& i) { ++i; });
+}
+
void g_constVariable_std_begin(int* p) { *p = 0; }
int f_constVariable_std_begin() {
From 2497700d763ca353be2088f0d02828f14fc31cc7 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 16:08:07 +0200
Subject: [PATCH 13/16] Update testsymboldatabase.cpp
---
test/testsymboldatabase.cpp | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp
index 05dd0ab9b8f..9b220e910e9 100644
--- a/test/testsymboldatabase.cpp
+++ b/test/testsymboldatabase.cpp
@@ -9958,12 +9958,39 @@ class TestSymbolDatabase : public TestFixture {
ASSERT(tok && tok->valueType());
ASSERT_EQUALS("container(std :: set|unordered_set <) &", tok->valueType()->str());
}
+ struct U_constParameter_std_begin {
+
+};
+
+void f(S_constParameter_std_begin& s) {
+ std::for_each(std::begin(s.a), std::end(s.a), [](int& i) { ++i; });
+}
+
+void f(T_constParameter_std_begin& t) {
+ std::for_each(std::begin(t.v), std::end(t.v), [](int& i) { ++i; });
+}
+
+void f(U_constParameter_std_begin& u) {
+ std::for_each(std::begin(u.v[0][0]), std::end(u.v[0][0]), [](int& i) { ++i; });
+}
{
GET_SYMBOL_DB("void f(std::vector v) {\n"
" auto it = std::find(v.begin(), v.end(), 0);\n"
"}\n");
ASSERT_EQUALS("", errout_str());
+ const Token* tok = tokenizer.tokens();
+ tok = Token::findsimplematch(tok, "auto");
+ ASSERT(tok && tok->valueType());
+ ASSERT_EQUALS("iterator(std :: vector <)", tok->valueType()->str());
+ }
+ {
+ GET_SYMBOL_DB("struct S { std::vector v[1][1]; };\n"
+ "void f(S& s) {\n"
+ " auto it = std::begin(s.v[0][0]);\n"
+ "}\n");
+ ASSERT_EQUALS("", errout_str());
+
const Token* tok = tokenizer.tokens();
tok = Token::findsimplematch(tok, "auto");
ASSERT(tok && tok->valueType());
From 7f7555318b7885d952a469ea3d411a2120aca526 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 16:34:01 +0200
Subject: [PATCH 14/16] Update testsymboldatabase.cpp
---
test/testsymboldatabase.cpp | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp
index 9b220e910e9..f09a69a93bf 100644
--- a/test/testsymboldatabase.cpp
+++ b/test/testsymboldatabase.cpp
@@ -9958,21 +9958,6 @@ class TestSymbolDatabase : public TestFixture {
ASSERT(tok && tok->valueType());
ASSERT_EQUALS("container(std :: set|unordered_set <) &", tok->valueType()->str());
}
- struct U_constParameter_std_begin {
-
-};
-
-void f(S_constParameter_std_begin& s) {
- std::for_each(std::begin(s.a), std::end(s.a), [](int& i) { ++i; });
-}
-
-void f(T_constParameter_std_begin& t) {
- std::for_each(std::begin(t.v), std::end(t.v), [](int& i) { ++i; });
-}
-
-void f(U_constParameter_std_begin& u) {
- std::for_each(std::begin(u.v[0][0]), std::end(u.v[0][0]), [](int& i) { ++i; });
-}
{
GET_SYMBOL_DB("void f(std::vector v) {\n"
" auto it = std::find(v.begin(), v.end(), 0);\n"
From bb3c979914b4e6fbfa05f37ce1e16f1b96a0e861 Mon Sep 17 00:00:00 2001
From: chrchr-github <78114321+chrchr-github@users.noreply.github.com>
Date: Wed, 8 Apr 2026 16:44:26 +0200
Subject: [PATCH 15/16] Update symboldatabase.cpp
---
lib/symboldatabase.cpp | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp
index 0d1ea8f150b..4f6f7414515 100644
--- a/lib/symboldatabase.cpp
+++ b/lib/symboldatabase.cpp
@@ -8035,8 +8035,7 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to
}
}
//Is iterator fetching function called?
- } else if (Token::simpleMatch(tok->astOperand1(), "::") &&
- tok->astOperand2()) {
+ } else if (Token::simpleMatch(tok->astOperand1(), "::") && Token::Match(tok->astOperand2(), "%var%|.|[")) {
const Token* varTok = tok->astOperand2();
while (Token::simpleMatch(varTok, "["))
varTok = varTok->astOperand1();
From e3410333c12e6c6d22b44110398670e4617083ad Mon Sep 17 00:00:00 2001
From: chrchr-github
Date: Wed, 8 Apr 2026 18:23:09 +0200
Subject: [PATCH 16/16] Format
---
lib/symboldatabase.cpp | 2 +-
test/testsymboldatabase.cpp | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp
index 4f6f7414515..1b84b3b1219 100644
--- a/lib/symboldatabase.cpp
+++ b/lib/symboldatabase.cpp
@@ -8040,7 +8040,7 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to
while (Token::simpleMatch(varTok, "["))
varTok = varTok->astOperand1();
if (Token::simpleMatch(varTok, "."))
- varTok = varTok->astOperand2();
+ varTok = varTok->astOperand2();
const auto* const paramVariable = varTok->variable();
if (!paramVariable ||
!paramVariable->valueType() ||
diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp
index f09a69a93bf..8348e0cd44b 100644
--- a/test/testsymboldatabase.cpp
+++ b/test/testsymboldatabase.cpp
@@ -9968,7 +9968,7 @@ class TestSymbolDatabase : public TestFixture {
tok = Token::findsimplematch(tok, "auto");
ASSERT(tok && tok->valueType());
ASSERT_EQUALS("iterator(std :: vector <)", tok->valueType()->str());
- }
+ }
{
GET_SYMBOL_DB("struct S { std::vector v[1][1]; };\n"
"void f(S& s) {\n"