[clang-tools-extra] [clang-tidy] New bugprone-derived-method-shadowing-base-method (PR #154746)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 8 06:57:58 PDT 2025
================
@@ -0,0 +1,127 @@
+//===----------------------------------------------------------------------===//
+//
+// 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 "DerivedMethodShadowingBaseMethodCheck.h"
+#include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/ASTMatchers/ASTMatchers.h"
+
+using namespace clang::ast_matchers;
+
+namespace clang::tidy::bugprone {
+
+static bool sameBasicType(const ParmVarDecl *Lhs, const ParmVarDecl *Rhs) {
+ return Lhs && Rhs &&
+ Lhs->getType()
+ .getCanonicalType()
+ .getNonReferenceType()
+ .getUnqualifiedType() == Rhs->getType()
+ .getCanonicalType()
+ .getNonReferenceType()
+ .getUnqualifiedType();
+}
+
+static bool namesCollide(const CXXMethodDecl &Lhs, const CXXMethodDecl &Rhs) {
+ if (Lhs.getNameAsString() != Rhs.getNameAsString())
+ return false;
+ if (Lhs.isConst() != Rhs.isConst())
+ return false;
+ if (Lhs.getNumParams() != Rhs.getNumParams())
+ return false;
+ for (unsigned int It = 0; It < Lhs.getNumParams(); ++It)
+ if (!sameBasicType(Lhs.getParamDecl(It), Rhs.getParamDecl(It)))
+ return false;
+ return true;
+}
+
+namespace {
+
+AST_MATCHER(CXXMethodDecl, nameCollidesWithMethodInBase) {
+ const CXXRecordDecl *DerivedClass = Node.getParent();
+ for (const auto &Base : DerivedClass->bases()) {
+ llvm::SmallVector<const CXXBaseSpecifier *, 8> Stack;
+ Stack.push_back(&Base);
+ while (!Stack.empty()) {
+ const CXXBaseSpecifier *CurrentBaseSpec = Stack.back();
+ Stack.pop_back();
+
+ if (CurrentBaseSpec->getAccessSpecifier() ==
+ clang::AccessSpecifier::AS_private)
+ continue;
+
+ const auto *CurrentRecord =
----------------
t-a-james wrote:
Doesn't `getAsCXXRecordDecl();` count?
https://github.com/llvm/llvm-project/pull/154746
More information about the cfe-commits
mailing list