From a2dc2934236399aa827a2e3b4bc3aff66a73d421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludvig=20Gunne=20Lindstr=C3=B6m?= Date: Mon, 13 Jul 2026 13:55:50 +0200 Subject: [PATCH 1/2] add test --- test/testsimplifyusing.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/testsimplifyusing.cpp b/test/testsimplifyusing.cpp index 160f80762a8..5210d484d40 100644 --- a/test/testsimplifyusing.cpp +++ b/test/testsimplifyusing.cpp @@ -78,6 +78,7 @@ class TestSimplifyUsing : public TestFixture { TEST_CASE(simplifyUsing38); TEST_CASE(simplifyUsing39); TEST_CASE(simplifyUsing40); + TEST_CASE(simplifyUsing41); TEST_CASE(simplifyUsing8970); TEST_CASE(simplifyUsing8971); @@ -948,6 +949,13 @@ class TestSimplifyUsing : public TestFixture { ASSERT_EQUALS(expected, tok(code)); } + void simplifyUsing41() { + const char code[] = "using FpHandler = void(*)(const SourceLocation&);\n" + "inline FpHandler AssertImpl::m_fpHandler = nullptr;\n"; + const char expected[] = "void ( * AssertImpl :: m_fpHandler ) ( const SourceLocation & ) ; m_fpHandler = nullptr ;"; + ASSERT_EQUALS(expected, tok(code)); + } + void simplifyUsing8970() { const char code[] = "using V = std::vector;\n" "struct A {\n" From ce4156e54d41067b255ca2d06171b709f821cbe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludvig=20Gunne=20Lindstr=C3=B6m?= Date: Mon, 13 Jul 2026 13:55:55 +0200 Subject: [PATCH 2/2] fix --- lib/tokenize.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 4e00e0d184e..f273cd623ec 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3389,12 +3389,17 @@ bool Tokenizer::simplifyUsing() } else if (fpArgList && fpQual && Token::Match(tok1->next(), "%name%")) { // function pointer const bool isFuncDecl = Token::simpleMatch(tok1->tokAt(2), "("); - TokenList::copyTokens(tok1->next(), fpArgList, usingEnd->previous()); + Token *dest = tok1->next(); + while (Token::Match(dest, "%name% :: %name%")) + dest = dest->tokAt(2); + TokenList::copyTokens(dest, fpArgList, usingEnd->previous()); Token* const copyEnd = TokenList::copyTokens(tok1, start, fpQual->link()->previous()); Token* leftPar = copyEnd->previous(); while (leftPar->str() != "(") leftPar = leftPar->previous(); - Token* const insertTok = isFuncDecl ? copyEnd->linkAt(2) : copyEnd->next(); + Token *insertTok = isFuncDecl ? copyEnd->linkAt(2) : copyEnd->next(); + while (Token::Match(insertTok, "%name% :: %name%")) + insertTok = insertTok->tokAt(2); Token* const rightPar = insertTok->insertToken(")"); Token::createMutualLinks(leftPar, rightPar); tok1->deleteThis();