diff --git a/lib/checkautovariables.cpp b/lib/checkautovariables.cpp index 50d8e9fec..cd215964b 100644 --- a/lib/checkautovariables.cpp +++ b/lib/checkautovariables.cpp @@ -563,7 +563,9 @@ static const Token* getParentLifetime(bool cpp, const Token* tok, const Library* const Token* dotTok = tok2->next(); if (!Token::simpleMatch(dotTok, ".")) { const Token* endTok = nextAfterAstRightmostLeaf(tok2); - if (Token::simpleMatch(endTok, ".")) + if (!endTok) + dotTok = tok2->next(); + else if (Token::simpleMatch(endTok, ".")) dotTok = endTok; else if (Token::simpleMatch(endTok->next(), ".")) dotTok = endTok->next(); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 102dab9c5..09380a426 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -415,8 +415,8 @@ private: // #9052 TEST_CASE(noCrash1); TEST_CASE(noCrash2); - TEST_CASE(noCrash3); + TEST_CASE(noCrash4); // --check-config TEST_CASE(checkConfiguration); @@ -6963,6 +6963,15 @@ private: ASSERT_NO_THROW(tokenizeAndStringify("void a(X x, typename Y1::Y2 y, Z z = []{});")); } + void noCrash4() + { + ASSERT_NO_THROW(tokenizeAndStringify("static int foo() {\n" + " zval ref ;\n" + " p = &(ref).value;\n" + " return result ;\n" + "}\n")); + } + void checkConfig(const char code[]) { errout.str("");