diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index b1862fa83..dab472ae0 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -1194,7 +1194,7 @@ void Tokenizer::simplifyTypedef() if (simplifyType) { // can't simplify 'operator functionPtr ()' and 'functionPtr operator ... ()' if (functionPtr && (tok2->previous()->str() == "operator" || - tok2->next()->str() == "operator")) { + (tok2->next() && tok2->next()->str() == "operator"))) { simplifyType = false; tok2 = tok2->next(); continue; @@ -5213,6 +5213,8 @@ void Tokenizer::simplifyPointerToStandardType() tok->next()->eraseTokens(tok->next(), tok->tokAt(5)); // Remove '&' prefix tok = tok->previous(); + if (!tok) + break; tok->deleteNext(); } } diff --git a/test/testgarbage.cpp b/test/testgarbage.cpp index 9b7e9b452..809bb1cc0 100644 --- a/test/testgarbage.cpp +++ b/test/testgarbage.cpp @@ -105,6 +105,8 @@ private: TEST_CASE(garbageCode64); TEST_CASE(garbageCode65); TEST_CASE(garbageCode66); + TEST_CASE(garbageCode67); + TEST_CASE(garbageCode68); TEST_CASE(garbageValueFlow); TEST_CASE(garbageSymbolDatabase); @@ -590,6 +592,14 @@ private: ASSERT_THROW(checkCode("{ { } }; { { } }; { }; class bar : public virtual"), InternalError); } + void garbageCode67() { // #6744 + checkCode("&g[0]; { (g[0] 0) } =", "test.c"); + } + + void garbageCode68() { // #6745 + checkCode("(int a[3]); typedef void (*fp) (void); fp"); + } + void garbageValueFlow() { // #6089