diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index c7f2d6ee8..22a8c463e 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -786,7 +786,7 @@ void SymbolDatabase::createSymbolDatabaseFindAllScopes() const Token* tok1 = tok->next(); if (tok->str() == "else") scopeList.push_back(Scope(this, tok, scope, Scope::eElse, tok1)); - if (tok->str() == "do") + else if (tok->str() == "do") scopeList.push_back(Scope(this, tok, scope, Scope::eDo, tok1)); else //if (tok->str() == "try") scopeList.push_back(Scope(this, tok, scope, Scope::eTry, tok1)); diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index a6fdf26b0..f512f403b 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -254,6 +254,7 @@ private: TEST_CASE(symboldatabase54); // #7257 TEST_CASE(symboldatabase55); // #7767 (return unknown macro) TEST_CASE(symboldatabase56); // #7909 + TEST_CASE(symboldatabase57); TEST_CASE(enum1); TEST_CASE(enum2); @@ -2755,6 +2756,27 @@ private: } } + void symboldatabase57() { + GET_SYMBOL_DB("int bar(bool b)\n" + "{\n" + " if(b)\n" + " return 1;\n" + " else\n" + " return 1;\n" + "}"); + ASSERT(db != nullptr); + if (db) { + ASSERT(db->scopeList.size() == 4U); + if (db->scopeList.size() == 4U) { + std::list::const_iterator it = db->scopeList.begin(); + ASSERT(it->type == Scope::eGlobal); + ASSERT((++it)->type == Scope::eFunction); + ASSERT((++it)->type == Scope::eIf); + ASSERT((++it)->type == Scope::eElse); + } + } + } + void enum1() { GET_SYMBOL_DB("enum BOOL { FALSE, TRUE }; enum BOOL b;");