From 04ce5dc910d8dafc1783d4b1a1d06b06313abfda Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 12 Oct 2026 09:06:12 +0200 Subject: [PATCH 1/4] Update testvarid.cpp --- test/testvarid.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/testvarid.cpp b/test/testvarid.cpp index b45074ceea6..fe7c86e75de 100644 --- a/test/testvarid.cpp +++ b/test/testvarid.cpp @@ -3624,6 +3624,26 @@ class TestVarID : public TestFixture { "8: memset ( :: Z :: b@3 . a , 123 , 5 ) ;\n" "9: }\n"; ASSERT_EQUALS(exp, tokenize(code)); + + const char code2[] = "double d(int);\n" // #15098 + "void g(double d);\n" + "void f() {\n" + "int i = 1;\n" + "double d = 0;\n" + "if (d == ::d(i)) {\n" + " d = ::d(2);\n" + "}\n" + "}\n"; + const char exp2[] = "1: double d ( int ) ;\n" + "2: void g ( double d@1 ) ;\n" + "3: void f ( ) {\n" + "4: int i@2 ; i@2 = 1 ;\n" + "5: double d@3 ; d@3 = 0 ;\n" + "6: if ( d@3 == :: d ( i@2 ) ) {\n" + "7: d@3 = :: d ( 2 ) ;\n" + "8: }\n" + "9: }\n"; + ASSERT_EQUALS(exp2, tokenize(code2)); } void varid_function_pointer_args() { From d724b2d05be83c620f851022f48974b8adab2826 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 12 Oct 2026 09:07:32 +0200 Subject: [PATCH 2/4] Update tokenize.cpp --- lib/tokenize.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 33554dd8ac8..3aa9e9ce564 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -5083,7 +5083,7 @@ void Tokenizer::setVarIdPass1() if (decl) { if (isC() && Token::Match(prev2->previous(), "&|&&")) syntaxErrorC(prev2, prev2->strAt(-2) + prev2->strAt(-1) + " " + prev2->str()); - variableMap.addVariable(prev2->str(), scopeStack.size() <= 1); + variableMap.addVariable(prev2->str(), scopeStack.size() <= 1 && !TokenList::isFunctionHead(tok, ";")); if (Token::simpleMatch(tok->previous(), "for (") && Token::Match(prev2, "%name% [=[({,]")) { for (const Token *tok3 = prev2->next(); tok3 && tok3->str() != ";"; tok3 = tok3->next()) { From f2a3099a0f7c379063eb4d75e54c006467d17159 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 12 Oct 2026 12:33:59 +0200 Subject: [PATCH 3/4] Update tokenize.cpp [skip ci] --- lib/tokenize.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 3aa9e9ce564..1d5b7436405 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -5083,7 +5083,7 @@ void Tokenizer::setVarIdPass1() if (decl) { if (isC() && Token::Match(prev2->previous(), "&|&&")) syntaxErrorC(prev2, prev2->strAt(-2) + prev2->strAt(-1) + " " + prev2->str()); - variableMap.addVariable(prev2->str(), scopeStack.size() <= 1 && !TokenList::isFunctionHead(tok, ";")); + variableMap.addVariable(prev2->str(), scopeStack.size() <= 1 && !functionDeclEndToken); if (Token::simpleMatch(tok->previous(), "for (") && Token::Match(prev2, "%name% [=[({,]")) { for (const Token *tok3 = prev2->next(); tok3 && tok3->str() != ";"; tok3 = tok3->next()) { From d93e9004e6a50ad5e36a1c7b00f768ed68946e22 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 12 Oct 2026 12:35:14 +0200 Subject: [PATCH 4/4] Update testvarid.cpp --- test/testvarid.cpp | 50 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/test/testvarid.cpp b/test/testvarid.cpp index fe7c86e75de..a1874d3c5f2 100644 --- a/test/testvarid.cpp +++ b/test/testvarid.cpp @@ -3628,11 +3628,11 @@ class TestVarID : public TestFixture { const char code2[] = "double d(int);\n" // #15098 "void g(double d);\n" "void f() {\n" - "int i = 1;\n" - "double d = 0;\n" - "if (d == ::d(i)) {\n" - " d = ::d(2);\n" - "}\n" + " int i = 1;\n" + " double d = 0;\n" + " if (d == ::d(i)) {\n" + " d = ::d(2);\n" + " }\n" "}\n"; const char exp2[] = "1: double d ( int ) ;\n" "2: void g ( double d@1 ) ;\n" @@ -3644,6 +3644,46 @@ class TestVarID : public TestFixture { "8: }\n" "9: }\n"; ASSERT_EQUALS(exp2, tokenize(code2)); + + const char code3[] = "double d(int);\n" + "void g(int, double d);\n" + "void f() {\n" + " int i = 1;\n" + " double d = 0;\n" + " if (d == ::d(i)) {\n" + " d = ::d(2);\n" + " }\n" + "}\n"; + const char exp3[] = "1: double d ( int ) ;\n" + "2: void g ( int , double d@1 ) ;\n" + "3: void f ( ) {\n" + "4: int i@2 ; i@2 = 1 ;\n" + "5: double d@3 ; d@3 = 0 ;\n" + "6: if ( d@3 == :: d ( i@2 ) ) {\n" + "7: d@3 = :: d ( 2 ) ;\n" + "8: }\n" + "9: }\n"; + ASSERT_EQUALS(exp3, tokenize(code3)); + + const char code4[] = "double d(int);\n" + "void g(int, double d) { (void)d; }\n" + "void f() {\n" + " int i = 1;\n" + " double d = 0;\n" + " if (d == ::d(i)) {\n" + " d = ::d(2);\n" + " }\n" + "}\n"; + const char exp4[] = "1: double d ( int ) ;\n" + "2: void g ( int , double d@1 ) { ( void ) d@1 ; }\n" + "3: void f ( ) {\n" + "4: int i@2 ; i@2 = 1 ;\n" + "5: double d@3 ; d@3 = 0 ;\n" + "6: if ( d@3 == :: d ( i@2 ) ) {\n" + "7: d@3 = :: d ( 2 ) ;\n" + "8: }\n" + "9: }\n"; + ASSERT_EQUALS(exp4, tokenize(code4)); } void varid_function_pointer_args() {