https://github.com/PiotrZSL updated 
https://github.com/llvm/llvm-project/pull/150290

>From 76f481c6471f71151855082360416078c14675ea Mon Sep 17 00:00:00 2001
From: Piotr Zegar <m...@piotrzegar.pl>
Date: Wed, 23 Jul 2025 19:11:28 +0000
Subject: [PATCH 1/2] [clang-tidy] Ignore pure-virtual in
 portability-template...

Ignore pure virtual member functions in
portability-template-virtual-member-function check.
Those functions will be represented in vtable
as __cxa_pure_virtual or something similar.
---
 .../TemplateVirtualMemberFunctionCheck.cpp      |  5 +++--
 clang-tools-extra/docs/ReleaseNotes.rst         |  6 +++++-
 .../template-virtual-member-function.cpp        | 17 +++++++++++++++++
 3 files changed, 25 insertions(+), 3 deletions(-)

diff --git 
a/clang-tools-extra/clang-tidy/portability/TemplateVirtualMemberFunctionCheck.cpp
 
b/clang-tools-extra/clang-tidy/portability/TemplateVirtualMemberFunctionCheck.cpp
index 9c2f27f01f184..aaa23367a3825 100644
--- 
a/clang-tools-extra/clang-tidy/portability/TemplateVirtualMemberFunctionCheck.cpp
+++ 
b/clang-tools-extra/clang-tidy/portability/TemplateVirtualMemberFunctionCheck.cpp
@@ -18,10 +18,11 @@ AST_MATCHER(CXXMethodDecl, isUsed) { return Node.isUsed(); }
 
 void TemplateVirtualMemberFunctionCheck::registerMatchers(MatchFinder *Finder) 
{
   Finder->addMatcher(
-      cxxMethodDecl(ofClass(classTemplateSpecializationDecl(
+      cxxMethodDecl(isVirtual(),
+                    ofClass(classTemplateSpecializationDecl(
                                 unless(isExplicitTemplateSpecialization()))
                                 .bind("specialization")),
-                    isVirtual(), unless(isUsed()),
+                    unless(isUsed()), unless(isPure()),
                     unless(cxxDestructorDecl(isDefaulted())))
           .bind("method"),
       this);
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index c5f756aeee6eb..c75d9ca71cad7 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -121,7 +121,11 @@ Changes in existing checks
 
 - Improved :doc:`misc-header-include-cycle
   <clang-tidy/checks/misc/header-include-cycle>` check performance.
-  
+
+- Improved :doc:`portability-template-virtual-member-function
+  <clang-tidy/checks/portability/template-virtual-member-function>` check to
+  avoid false positives on pure virtual member functions.
+
 Removed checks
 ^^^^^^^^^^^^^^
 
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/portability/template-virtual-member-function.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/portability/template-virtual-member-function.cpp
index 94786ae93dd3f..4626365699888 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/portability/template-virtual-member-function.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/portability/template-virtual-member-function.cpp
@@ -171,3 +171,20 @@ struct NoInstantiation<int, U>{
     };
 };
 } // namespace PartialSpecializationNoInstantiation
+
+namespace PR139031 {
+
+template<typename T>
+struct Base {
+    virtual void foo() = 0;
+};
+
+struct Derived : public Base<int> {
+    void foo() {}
+};
+
+void test() {
+    Derived{}.foo();
+}
+
+}

>From 2227ab80ba1ee3aa3e157fd6bf7fb659f33125a5 Mon Sep 17 00:00:00 2001
From: Piotr Zegar <m...@piotrzegar.pl>
Date: Wed, 23 Jul 2025 21:51:21 +0200
Subject: [PATCH 2/2] Update
 
clang-tools-extra/test/clang-tidy/checkers/portability/template-virtual-member-function.cpp

Change namespace name

Co-authored-by: Baranov Victor <bar.victor.2...@gmail.com>
---
 .../checkers/portability/template-virtual-member-function.cpp   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/portability/template-virtual-member-function.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/portability/template-virtual-member-function.cpp
index 4626365699888..2a67b79cb358a 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/portability/template-virtual-member-function.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/portability/template-virtual-member-function.cpp
@@ -172,7 +172,7 @@ struct NoInstantiation<int, U>{
 };
 } // namespace PartialSpecializationNoInstantiation
 
-namespace PR139031 {
+namespace PureVirtual {
 
 template<typename T>
 struct Base {

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to