diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 33a59d7bda3..1fd86453e5c 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3341,12 +3341,14 @@ 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* const copyEnd = TokenList::copyTokens(tok1, start, fpQual->link()->previous()); Token* leftPar = copyEnd->previous(); while (leftPar->str() != "(") leftPar = leftPar->previous(); - Token* const rightPar = copyEnd->next()->insertToken(")"); + Token* const insertTok = isFuncDecl ? copyEnd->linkAt(2) : copyEnd->next(); + Token* const rightPar = insertTok->insertToken(")"); Token::createMutualLinks(leftPar, rightPar); tok1->deleteThis(); substitute = true; diff --git a/test/testsimplifyusing.cpp b/test/testsimplifyusing.cpp index c020b99b5dd..647668a93b2 100644 --- a/test/testsimplifyusing.cpp +++ b/test/testsimplifyusing.cpp @@ -899,13 +899,19 @@ class TestSimplifyUsing : public TestFixture { ASSERT_EQUALS(expected2, tok(code2)); ASSERT_EQUALS("", errout_str()); - const char code3[] = "using FP = std::string (*)();\n" + const char code3[] = "using FP = std::string (*)();\n" // #14421 "using FPC = std::string (*const)();\n" "FP fp;\n" "FPC fpc{};\n"; const char expected3[] = "std :: string ( * fp ) ( ) ; std :: string ( * const fpc ) ( ) { } ;"; ASSERT_EQUALS(expected3, tok(code3)); ASSERT_EQUALS("", errout_str()); + + const char code4[] = "using F = void(*)(char);\n" // #14429 + "F f(int);\n"; + const char expected4[] = "void * f ( char ) ;"; + ASSERT_EQUALS(expected4, tok(code4)); + ASSERT_EQUALS("", errout_str()); } void simplifyUsing8970() {