Fixed #6308: Properly associate Function with Scope for destructors in SymbolDatabase

This commit is contained in:
PKEuS 2014-12-09 21:36:09 +01:00
parent cef324435f
commit e9bc3b7acf
2 changed files with 18 additions and 1 deletions

View File

@ -3462,7 +3462,10 @@ Function * SymbolDatabase::findFunctionInScope(const Token *func, const Scope *n
if (!function) {
const Scope * scope = ns->findRecordInNestedList(func->str());
if (scope && func->strAt(1) == "::") {
function = findFunctionInScope(func->tokAt(2), scope);
func = func->tokAt(2);
if (func->str() == "~")
func = func->next();
function = findFunctionInScope(func, scope);
}
}

View File

@ -219,6 +219,7 @@ private:
TEST_CASE(symboldatabase44);
TEST_CASE(symboldatabase45); // #6125
TEST_CASE(symboldatabase46); // #6171 (anonymous namespace)
TEST_CASE(symboldatabase47); // #6308
TEST_CASE(isImplicitlyVirtual);
@ -1998,6 +1999,19 @@ private:
ASSERT_EQUALS(scope->className, "S");
}
void symboldatabase47() { // #6308 - associate Function and Scope for destructors
GET_SYMBOL_DB("namespace NS {\n"
" class MyClass {\n"
" ~MyClass();\n"
" };\n"
"}\n"
"using namespace NS;\n"
"MyClass::~MyClass() {\n"
" delete Example;\n"
"}");
ASSERT(db && !db->functionScopes.empty() && db->functionScopes.front()->function && db->functionScopes.front()->function->functionScope == db->functionScopes.front());
}
void isImplicitlyVirtual() {
{
GET_SYMBOL_DB("class Base {\n"