From 5865b057032157076ce05a610b3c0fdcb094a1ea Mon Sep 17 00:00:00 2001 From: nomick Date: Thu, 11 Nov 2021 07:53:30 +0100 Subject: [PATCH] fix false positive of virtual function call (#3553) --- lib/checkclass.cpp | 2 +- test/testclass.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index bdba8e013..42787d1af 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -2423,7 +2423,7 @@ void CheckClass::checkVirtualFunctionCallInConstructor() continue; if (callstack.back()->function()->isPure()) pureVirtualFunctionCallInConstructorError(scope->function, callstack, callstack.back()->str()); - else + else if (!callstack.back()->function()->hasFinalSpecifier()) virtualFunctionCallInConstructorError(scope->function, callstack, callstack.back()->str()); } } diff --git a/test/testclass.cpp b/test/testclass.cpp index f53cfcb3e..7da29e2f6 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -6968,6 +6968,17 @@ private: " A() { f(); }\n" "};\n"); ASSERT_EQUALS("", errout.str()); + + checkVirtualFunctionCall("class B {\n" + "public:" + " virtual void f() {}\n" + "};\n" + "class A : B {\n" + "public:" + " void f() override final {}\n" + " A() { f(); }\n" + "};\n"); + ASSERT_EQUALS("", errout.str()); } void pureVirtualFunctionCall() {