diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 3df1a170c..3c858b1f3 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -878,13 +878,13 @@ void Tokenizer::simplifyTypedef() // typedef ... (( ... type )( ... )); // typedef ... ( * ( ... type )( ... )); else if (tokOffset->str() == "(" && ( - (Token::Match(tokOffset->link()->previous(), "%type% ) (") && + (tokOffset->link() && Token::Match(tokOffset->link()->previous(), "%type% ) (") && Token::Match(tokOffset->link()->next()->link(), ") const|volatile|;")) || (Token::simpleMatch(tokOffset, "( (") && - Token::Match(tokOffset->next()->link()->previous(), "%type% ) (") && + tokOffset->next() && Token::Match(tokOffset->next()->link()->previous(), "%type% ) (") && Token::Match(tokOffset->next()->link()->next()->link(), ") const|volatile| ) ;|,")) || (Token::simpleMatch(tokOffset, "( * (") && - Token::Match(tokOffset->linkAt(2)->previous(), "%type% ) (") && + tokOffset->linkAt(2) && Token::Match(tokOffset->linkAt(2)->previous(), "%type% ) (") && Token::Match(tokOffset->linkAt(2)->next()->link(), ") const|volatile| ) ;|,")))) { if (tokOffset->next()->str() == "(") tokOffset = tokOffset->next(); diff --git a/test/testgarbage.cpp b/test/testgarbage.cpp index 45ac2a0f3..e884e7035 100644 --- a/test/testgarbage.cpp +++ b/test/testgarbage.cpp @@ -100,6 +100,7 @@ private: TEST_CASE(garbageCode59); // #6735 TEST_CASE(garbageCode60); // #6736 TEST_CASE(garbageCode61); + TEST_CASE(garbageCode62); TEST_CASE(garbageValueFlow); TEST_CASE(garbageSymbolDatabase); @@ -565,6 +566,10 @@ private: ASSERT_THROW(checkCode("{ (const U&) }; { }; { }; struct U : virtual public"), InternalError); } + void garbageCode62() { // #6738 + checkCode("(int arg2) { } { } typedef void (func_type) (int, int); typedef func_type&"); + } + void garbageValueFlow() { // #6089