Fix getOverriddenFunction(), add test (#5213)

This commit is contained in:
chrchr-github 2023-07-01 17:23:26 +02:00 committed by GitHub
parent b99931c59c
commit db49687ae5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

View File

@ -4394,7 +4394,7 @@ const Function * Function::getOverriddenFunctionRecursive(const ::Type* baseType
bool match = true;
// check for matching return parameters
while (!Token::Match(temp1, "virtual|{|}|;")) {
while (!Token::Match(temp1, "virtual|public:|private:|protected:|{|}|;")) {
if (temp1->str() != temp2->str() &&
!(temp1->str() == derivedFromType->name() &&
temp2->str() == baseType->name())) {

View File

@ -249,6 +249,7 @@ private:
TEST_CASE(functionArgs20);
TEST_CASE(functionImplicitlyVirtual);
TEST_CASE(functionGetOverridden);
TEST_CASE(functionIsInlineKeyword);
@ -2730,6 +2731,24 @@ private:
ASSERT_EQUALS(true, function && function->isImplicitlyVirtual(false));
}
void functionGetOverridden() {
GET_SYMBOL_DB("struct B { virtual void f(); };\n"
"struct D : B {\n"
"public:\n"
" void f() override;\n"
"};\n"
"struct D2 : D { void f() override {} };\n");
ASSERT(db != nullptr);
ASSERT_EQUALS(5, db->scopeList.size());
const Function *func = db->scopeList.back().function;
ASSERT(func && func->nestedIn);
ASSERT_EQUALS("D2", func->nestedIn->className);
bool foundAllBaseClasses{};
const Function* baseFunc = func->getOverriddenFunction(&foundAllBaseClasses);
ASSERT(baseFunc && baseFunc->nestedIn && foundAllBaseClasses);
ASSERT_EQUALS("D", baseFunc->nestedIn->className);
}
void functionIsInlineKeyword() {
GET_SYMBOL_DB("inline void fs() {}");
(void)db;