[clang-tools-extra] [clang-tidy] Portability Template Virtual Member Function Check (PR #110099)

Julian Schmidt via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 26 17:25:03 PDT 2024


================
@@ -0,0 +1,48 @@
+//===--- TemplateVirtualMemberFunctionCheck.cpp - clang-tidy --------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "TemplateVirtualMemberFunctionCheck.h"
+#include "clang/ASTMatchers/ASTMatchFinder.h"
+
+using namespace clang::ast_matchers;
+
+namespace clang::tidy::portability {
+
+void TemplateVirtualMemberFunctionCheck::registerMatchers(MatchFinder *Finder) {
+  Finder->addMatcher(classTemplateSpecializationDecl().bind("specialization"),
+                     this);
+}
+
+void TemplateVirtualMemberFunctionCheck::check(
+    const MatchFinder::MatchResult &Result) {
+  const auto *MatchedDecl =
+      Result.Nodes.getNodeAs<ClassTemplateSpecializationDecl>("specialization");
+
+  if (MatchedDecl->isExplicitSpecialization())
+    return;
----------------
5chmidti wrote:

My bad.
I somehow got hung up on the partial specialization itself, but it just adds the possibility of the issue. The fact that the member is unused is only really knowable once we have an instantiation, which triggers a specialization for that instantiation.

https://github.com/llvm/llvm-project/pull/110099


More information about the cfe-commits mailing list