From e39b89efc36d15c106ea220c2a78a5633fbdc0f1 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Thu, 10 Apr 2014 20:11:03 +0200 Subject: [PATCH] Throw more syntaxErrors from SymbolDatabase, fixing #5663 --- lib/symboldatabase.cpp | 8 ++++---- test/testsymboldatabase.cpp | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 80374846d..cc80a5ece 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -665,6 +665,8 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti // regular function else { Function* function = addGlobalFunction(scope, tok, argStart, funcStart); + if (!function) + _tokenizer->syntaxError(tok); function->retFuncPtr = retFuncPtr; // global functions can't be const but we have tests that are @@ -692,10 +694,8 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti } // syntax error? - if (!scope) { - scope = old_scope; - break; - } + if (!scope) + _tokenizer->syntaxError(tok); } // function prototype? else if (scopeBegin->str() == ";") { diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 8c03986fa..dda3b0d21 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -1938,6 +1938,13 @@ private: { ASSERT_THROW(GET_SYMBOL_DB("class Foo {}; class Bar : public Foo"), InternalError); } + { + ASSERT_THROW(GET_SYMBOL_DB("YY_DECL { switch (yy_act) {\n" + " case 65: YY_BREAK\n" + " case YY_STATE_EOF(block):\n" + " yyterminate(); \n" + "} }"), InternalError); // #5663 + } } void findFunction1() {