From 1820849d27f3c8fd64bfc6908889fa13f8bbb6d0 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Fri, 13 Feb 2026 10:10:42 +0100 Subject: [PATCH 1/3] 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 31551764b7b..37a6036cdda 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -108,7 +108,7 @@ static bool isClassStructUnionEnumStart(const Token * tok) if (!Token::Match(tok->previous(), "class|struct|union|enum|%name%|>|>> {")) return false; const Token * tok2 = tok->previous(); - while (tok2 && !Token::Match(tok2, "class|struct|union|enum|{|}|)|;|>|>>")) + while (tok2 && !Token::Match(tok2, "class|struct|union|enum|{|}|)|;")) tok2 = tok2->previous(); return Token::Match(tok2, "class|struct|union|enum") && !Token::simpleMatch(tok2->tokAt(-1), "->"); } From 1ad2f49e769c94d5b8f380c7305736a88e2eb0f5 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Fri, 13 Feb 2026 10:12:08 +0100 Subject: [PATCH 2/3] Update testvarid.cpp --- test/testvarid.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/testvarid.cpp b/test/testvarid.cpp index 32bff9c5724..026f70934a4 100644 --- a/test/testvarid.cpp +++ b/test/testvarid.cpp @@ -149,6 +149,7 @@ class TestVarID : public TestFixture { TEST_CASE(varid_in_class26); TEST_CASE(varid_in_class27); TEST_CASE(varid_in_class28); + TEST_CASE(varid_in_class29); TEST_CASE(varid_namespace_1); // #7272 TEST_CASE(varid_namespace_2); // #7000 TEST_CASE(varid_namespace_3); // #8627 @@ -2380,6 +2381,28 @@ class TestVarID : public TestFixture { ASSERT_EQUALS(expected, tokenize(code)); } + void varid_in_class29() { + const char code[] = "struct S {\n" + " const int& r;\n" + " explicit S(const int& r) : r(r) {}\n" + " static void f() {\n" + " struct T : X {\n" + " bool g() const { return empty(); }\n" + " };\n" + " }\n" + "};\n"; + const char expected[] = "1: struct S {\n" + "2: const int & r@1 ;\n" + "3: explicit S ( const int & r@2 ) : r@1 ( r@2 ) { }\n" + "4: static void f ( ) {\n" + "5: struct T : X {\n" + "6: bool g ( ) const { return empty ( ) ; }\n" + "7: } ;\n" + "8: }\n" + "9: } ;\n"; + ASSERT_EQUALS(expected, tokenize(code)); + } + void varid_namespace_1() { // #7272 const char code[] = "namespace Blah {\n" " struct foo { int x;};\n" From c8543a1c20d7462cf70d00011d5c1b1a074f1583 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Fri, 13 Feb 2026 13:06:42 +0100 Subject: [PATCH 3/3] Fix test --- test/testvarid.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/testvarid.cpp b/test/testvarid.cpp index 026f70934a4..55627299e1d 100644 --- a/test/testvarid.cpp +++ b/test/testvarid.cpp @@ -2382,11 +2382,11 @@ class TestVarID : public TestFixture { } void varid_in_class29() { - const char code[] = "struct S {\n" + const char code[] = "struct S {\n" // #14486 " const int& r;\n" " explicit S(const int& r) : r(r) {}\n" " static void f() {\n" - " struct T : X {\n" + " struct T : std::vector {\n" " bool g() const { return empty(); }\n" " };\n" " }\n" @@ -2395,7 +2395,7 @@ class TestVarID : public TestFixture { "2: const int & r@1 ;\n" "3: explicit S ( const int & r@2 ) : r@1 ( r@2 ) { }\n" "4: static void f ( ) {\n" - "5: struct T : X {\n" + "5: struct T : std :: vector < int > {\n" "6: bool g ( ) const { return empty ( ) ; }\n" "7: } ;\n" "8: }\n"