From 8a668aa86033a10f4c31aa0371800a42fb64aab7 Mon Sep 17 00:00:00 2001 From: IOBYTE Date: Sun, 30 Apr 2017 02:58:41 -0400 Subject: [PATCH] Add missing else that could cause an extra try scope to be added to the scope list (#8025) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add an optional extended description… --- lib/symboldatabase.cpp | 2 +- test/testsymboldatabase.cpp | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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;");