Skip to content

Commit

Permalink
Fix #11808 FP uselessOverride - grandchildren calling grandfather (#5212
Browse files Browse the repository at this point in the history
)
  • Loading branch information
chrchr-github committed Jul 1, 2023
1 parent 96955cc commit b99931c
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/symboldatabase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4388,13 +4388,13 @@ const Function * Function::getOverriddenFunctionRecursive(const ::Type* baseType
auto range = parent->functionMap.equal_range(tokenDef->str());
for (std::multimap<std::string, const Function*>::const_iterator it = range.first; it != range.second; ++it) {
const Function * func = it->second;
if (func->hasVirtualSpecifier()) { // Base is virtual and of same name
if (func->isImplicitlyVirtual()) { // Base is virtual and of same name
const Token *temp1 = func->tokenDef->previous();
const Token *temp2 = tokenDef->previous();
bool match = true;

// check for matching return parameters
while (temp1->str() != "virtual") {
while (!Token::Match(temp1, "virtual|{|}|;")) {
if (temp1->str() != temp2->str() &&
!(temp1->str() == derivedFromType->name() &&
temp2->str() == baseType->name())) {
Expand Down
9 changes: 9 additions & 0 deletions test/testclass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8440,6 +8440,15 @@ class TestClass : public TestFixture {
" void g() { f(); }\n"
"};");
ASSERT_EQUALS("", errout.str());

checkUselessOverride("struct B { virtual void f(); };\n" // #11808
"struct D : B { void f() override {} };\n"
"struct D2 : D {\n"
" void f() override {\n"
" B::f();\n"
" }\n"
"};");
ASSERT_EQUALS("", errout.str());
}

#define checkUnsafeClassRefMember(code) checkUnsafeClassRefMember_(code, __FILE__, __LINE__)
Expand Down

1 comment on commit b99931c

@firewave
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.