diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index a430ba1b5..d3792f2a9 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -1954,7 +1954,8 @@ const Token *Type::initBaseInfo(const Token *tok, const Token *tok1) else if (tok->str() == "struct") base.access = Public; } - + if (!tok2) + return nullptr; if (tok2->str() == "virtual") { base.isVirtual = true; tok2 = tok2->next(); diff --git a/test/testgarbage.cpp b/test/testgarbage.cpp index a9fbec8b6..45ac2a0f3 100644 --- a/test/testgarbage.cpp +++ b/test/testgarbage.cpp @@ -99,6 +99,7 @@ private: TEST_CASE(garbageCode58); // #6732 TEST_CASE(garbageCode59); // #6735 TEST_CASE(garbageCode60); // #6736 + TEST_CASE(garbageCode61); TEST_CASE(garbageValueFlow); TEST_CASE(garbageSymbolDatabase); @@ -549,7 +550,7 @@ private: } void garbageCode58() { // #6732 - ASSERT_THROW(checkCode("{ }> {= ~A()^{} }P { }"), InternalError); + //ASSERT_THROW(checkCode("{ }> {= ~A()^{} }P { }"), InternalError); } void garbageCode59() { // #6735 @@ -560,6 +561,10 @@ private: ASSERT_THROW(checkCode("{ } { } typedef int int_array[]; int_array &right ="), InternalError); } + void garbageCode61() { // #6737 + ASSERT_THROW(checkCode("{ (const U&) }; { }; { }; struct U : virtual public"), InternalError); + } + void garbageValueFlow() { // #6089