From 956def138ebdc7bf721399cea5c6340d7303dca3 Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Sat, 4 May 2024 12:19:40 +0200 Subject: [PATCH 1/2] Fix #12706 FP uselessOverride with virtual function in derived class --- lib/checkclass.cpp | 2 ++ test/testclass.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index 4e6c8f5ee88..1f926f6ce20 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -3230,6 +3230,8 @@ static bool compareTokenRanges(const Token* start1, const Token* end1, const Tok const Token* tok2 = start2; bool isEqual = false; while (tok1 && tok2) { + if (tok1->function() != tok2->function()) + break; if (tok1->str() != tok2->str()) break; if (tok1->str() == "this") diff --git a/test/testclass.cpp b/test/testclass.cpp index c08690663ae..4a9c2197e22 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -8678,6 +8678,16 @@ class TestClass : public TestFixture { " int f() override { return MACRO; }\n" "};\n"); ASSERT_EQUALS("", errout_str()); + + checkUselessOverride("struct B {\n" + " virtual void f() { g(); }\n" + " void g() { std::cout << \"Base\\n\"; }\n" + "};\n" + "struct D : B {\n" + " void f() override { g(); }\n" + " virtual void g() { std::cout << \"Derived\\n\"; }\n" + "};\n"); + ASSERT_EQUALS("", errout_str()); } #define checkUnsafeClassRefMember(code) checkUnsafeClassRefMember_(code, __FILE__, __LINE__) From f6fc3111f603f5f0f3ebbb7cfd672b0ca16cdd6e Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Sat, 4 May 2024 12:19:57 +0200 Subject: [PATCH 2/2] Comment --- test/testclass.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testclass.cpp b/test/testclass.cpp index 4a9c2197e22..b51435580e2 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -8679,7 +8679,7 @@ class TestClass : public TestFixture { "};\n"); ASSERT_EQUALS("", errout_str()); - checkUselessOverride("struct B {\n" + checkUselessOverride("struct B {\n" // #12706 " virtual void f() { g(); }\n" " void g() { std::cout << \"Base\\n\"; }\n" "};\n"