Fixed #9851 (FP virtualDestructor - private virtual dtor)

This commit is contained in:
Daniel Marjamäki 2020-09-04 18:56:12 +02:00
parent 040da4ff32
commit 30d3643bb8
2 changed files with 12 additions and 8 deletions

View File

@ -1608,14 +1608,11 @@ void CheckClass::virtualDestructor()
if (scope->definedType->derivedFrom.empty()) {
if (printInconclusive) {
const Function *destructor = scope->getDestructor();
if (destructor) {
if (!((destructor->hasVirtualSpecifier() && destructor->access == AccessControl::Public) ||
(destructor->access == AccessControl::Protected))) {
for (const Function &func : scope->functionList) {
if (func.hasVirtualSpecifier()) {
inconclusiveErrors.push_back(destructor);
break;
}
if (destructor && !destructor->hasVirtualSpecifier() && destructor->access == AccessControl::Public) {
for (const Function &func : scope->functionList) {
if (func.hasVirtualSpecifier()) {
inconclusiveErrors.push_back(destructor);
break;
}
}
}

View File

@ -2531,6 +2531,13 @@ private:
" ~Base(){}\n"
"};\n", true);
ASSERT_EQUALS("", errout.str());
checkVirtualDestructor("class C {\n"
"private:\n"
" C();\n"
" virtual ~C();\n"
"};\n", true);
ASSERT_EQUALS("", errout.str());
}
void checkNoMemset(const char code[]) {