diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 0d48fb2eb..30ded2a40 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -494,7 +494,8 @@ bool Tokenizer::duplicateTypedef(Token **tokPtr, const Token *name) // look backwards if (Token::Match(tok->previous(), "typedef|}|>") || (Token::Match(tok->previous(), "%type%") && - !Token::Match(tok->previous(), "return|new|const|friend"))) + (!Token::Match(tok->previous(), "return|new|const|friend") && + !Token::Match(tok->tokAt(-2), "friend class")))) { // scan backwards for the end of the previous statement int level = (tok->previous()->str() == "}") ? 1 : 0; diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index ffaeb9c57..b9d2c9585 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -178,6 +178,7 @@ private: TEST_CASE(simplifyTypedef38); TEST_CASE(simplifyTypedef39); TEST_CASE(simplifyTypedef40); + TEST_CASE(simplifyTypedef41); // ticket #1488 TEST_CASE(reverseArraySyntax) TEST_CASE(simplify_numeric_condition) @@ -3508,6 +3509,18 @@ private: ASSERT_EQUALS("", errout.str()); } + void simplifyTypedef41() + { + // ticket #1488 + checkSimplifyTypedef("class Y;\n" + "class X\n" + "{\n" + " typedef Y type;\n" + " friend class type;\n" + "};"); + ASSERT_EQUALS("", errout.str()); + } + void reverseArraySyntax() { ASSERT_EQUALS("a [ 13 ]", tok("13[a]"));