diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 0ef0c958b..c2233a0c6 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -1630,7 +1630,7 @@ void Function::addArguments(const SymbolDatabase *symbolDatabase, const Scope *s // skip default values if (tok->str() == "=") { while (tok->str() != "," && tok->str() != ")") { - if (tok->link()) + if (tok->link() && Token::Match(tok, "[{[(<]")) tok = tok->link(); tok = tok->next(); } diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 6777f66af..b9b34552e 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -154,6 +154,8 @@ private: TEST_CASE(symboldatabase28); TEST_CASE(isImplicitlyVirtual); + + TEST_CASE(garbage); } void array() { @@ -1380,6 +1382,11 @@ private: ASSERT(db && db->findScopeByName("Deri") && db->findScopeByName("Deri")->functionList.front().isImplicitlyVirtual(false)); // Default false, but we saw "virtual" -> true } } + + void garbage() { + GET_SYMBOL_DB("void f( { u = 1 ; } ) { }"); + (void)db; + } }; REGISTER_TEST(TestSymbolDatabase)