[clang-tools-extra] [clang-tidy] Rename and move 'cert-oop58-cpp' to 'bugprone-copy-constructor-mutates-argument' (PR #164566)

Dasha Buka via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 27 16:00:56 PDT 2025


https://github.com/dvbuka updated https://github.com/llvm/llvm-project/pull/164566

>From 4640cf73b874a90acd4799b6a710d6139fcd08cb Mon Sep 17 00:00:00 2001
From: Dasha Buka <102774272+dvbuka at users.noreply.github.com>
Date: Wed, 22 Oct 2025 00:17:46 -0700
Subject: [PATCH 1/8] Move check cert-oop58-cpp => bugprone-mutating-copy

---
 .../bugprone/BugproneTidyModule.cpp           |   2 +
 .../clang-tidy/bugprone/CMakeLists.txt        |   1 +
 .../{cert => bugprone}/MutatingCopyCheck.cpp  |   4 +-
 .../{cert => bugprone}/MutatingCopyCheck.h    |  12 +-
 .../clang-tidy/cert/CERTTidyModule.cpp        |   4 +-
 .../clang-tidy/cert/CMakeLists.txt            |   1 -
 .../checks/bugprone/mutating-copy.rst         |  11 ++
 .../docs/clang-tidy/checks/cert/oop58-cpp.rst |  11 +-
 .../checkers/bugprone/mutating-copy.cpp       | 149 ++++++++++++++++++
 9 files changed, 178 insertions(+), 17 deletions(-)
 rename clang-tools-extra/clang-tidy/{cert => bugprone}/MutatingCopyCheck.cpp (97%)
 rename clang-tools-extra/clang-tidy/{cert => bugprone}/MutatingCopyCheck.h (73%)
 create mode 100644 clang-tools-extra/docs/clang-tidy/checks/bugprone/mutating-copy.rst
 create mode 100644 clang-tools-extra/test/clang-tidy/checkers/bugprone/mutating-copy.cpp

diff --git a/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp b/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
index e6115f67656bc..79851be690759 100644
--- a/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
@@ -52,6 +52,7 @@
 #include "MultiLevelImplicitPointerConversionCheck.h"
 #include "MultipleNewInOneExpressionCheck.h"
 #include "MultipleStatementMacroCheck.h"
+#include "MutatingCopyCheck.h"
 #include "NarrowingConversionsCheck.h"
 #include "NoEscapeCheck.h"
 #include "NonZeroEnumToBoolConversionCheck.h"
@@ -198,6 +199,7 @@ class BugproneModule : public ClangTidyModule {
         "bugprone-multiple-new-in-one-expression");
     CheckFactories.registerCheck<MultipleStatementMacroCheck>(
         "bugprone-multiple-statement-macro");
+    CheckFactories.registerCheck<MutatingCopyCheck>("bugprone-mutating-copy");
     CheckFactories.registerCheck<NondeterministicPointerIterationOrderCheck>(
         "bugprone-nondeterministic-pointer-iteration-order");
     CheckFactories.registerCheck<OptionalValueConversionCheck>(
diff --git a/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt b/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
index c8943e5b22ef8..0dfcd3270cac2 100644
--- a/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
@@ -53,6 +53,7 @@ add_clang_library(clangTidyBugproneModule STATIC
   MultiLevelImplicitPointerConversionCheck.cpp
   MultipleNewInOneExpressionCheck.cpp
   MultipleStatementMacroCheck.cpp
+  MutatingCopyCheck.cpp
   NarrowingConversionsCheck.cpp
   NoEscapeCheck.cpp
   NonZeroEnumToBoolConversionCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/cert/MutatingCopyCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.cpp
similarity index 97%
rename from clang-tools-extra/clang-tidy/cert/MutatingCopyCheck.cpp
rename to clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.cpp
index fb9d72ce6bd31..9485270864618 100644
--- a/clang-tools-extra/clang-tidy/cert/MutatingCopyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.cpp
@@ -12,7 +12,7 @@
 
 using namespace clang::ast_matchers;
 
-namespace clang::tidy::cert {
+namespace clang::tidy::bugprone {
 
 static constexpr llvm::StringLiteral SourceDeclName = "ChangedPVD";
 static constexpr llvm::StringLiteral MutatingOperatorName = "MutatingOp";
@@ -69,4 +69,4 @@ void MutatingCopyCheck::check(const MatchFinder::MatchResult &Result) {
     diag(Assignment->getBeginLoc(), "mutating copied object");
 }
 
-} // namespace clang::tidy::cert
+} // namespace clang::tidy::bugprone
diff --git a/clang-tools-extra/clang-tidy/cert/MutatingCopyCheck.h b/clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.h
similarity index 73%
rename from clang-tools-extra/clang-tidy/cert/MutatingCopyCheck.h
rename to clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.h
index c211fa004120c..9d2c8f12f65fa 100644
--- a/clang-tools-extra/clang-tidy/cert/MutatingCopyCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.h
@@ -6,18 +6,18 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CERT_MUTATINGCOPYCHECK_H
-#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CERT_MUTATINGCOPYCHECK_H
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_MUTATINGCOPYCHECK_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_MUTATINGCOPYCHECK_H
 
 #include "../ClangTidyCheck.h"
 
-namespace clang::tidy::cert {
+namespace clang::tidy::bugprone {
 
 /// Finds assignments to the copied object and its direct or indirect members
 /// in copy constructors and copy assignment operators.
 ///
 /// For the user-facing documentation see:
-/// https://clang.llvm.org/extra/clang-tidy/checks/cert/oop58-cpp.html
+/// https://clang.llvm.org/extra/clang-tidy/checks/bugprone/mutating-copy.html
 class MutatingCopyCheck : public ClangTidyCheck {
 public:
   MutatingCopyCheck(StringRef Name, ClangTidyContext *Context)
@@ -29,6 +29,6 @@ class MutatingCopyCheck : public ClangTidyCheck {
   void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
 };
 
-} // namespace clang::tidy::cert
+} // namespace clang::tidy::bugprone
 
-#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CERT_MUTATINGCOPYCHECK_H
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_MUTATINGCOPYCHECK_H
diff --git a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
index c1ca2cec7a1eb..01f33371f52cc 100644
--- a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
@@ -11,6 +11,7 @@
 #include "../ClangTidyModuleRegistry.h"
 #include "../bugprone/BadSignalToKillThreadCheck.h"
 #include "../bugprone/CommandProcessorCheck.h"
+#include "../bugprone/MutatingCopyCheck.h"
 #include "../bugprone/PointerArithmeticOnPolymorphicObjectCheck.h"
 #include "../bugprone/ReservedIdentifierCheck.h"
 #include "../bugprone/SignalHandlerCheck.h"
@@ -38,7 +39,6 @@
 #include "DontModifyStdNamespaceCheck.h"
 #include "FloatLoopCounter.h"
 #include "LimitedRandomnessCheck.h"
-#include "MutatingCopyCheck.h"
 #include "NonTrivialTypesLibcMemoryCallsCheck.h"
 #include "ProperlySeededRandomGeneratorCheck.h"
 #include "ThrownExceptionTypeCheck.h"
@@ -280,7 +280,7 @@ class CERTModule : public ClangTidyModule {
         "cert-oop54-cpp");
     CheckFactories.registerCheck<NonTrivialTypesLibcMemoryCallsCheck>(
         "cert-oop57-cpp");
-    CheckFactories.registerCheck<MutatingCopyCheck>("cert-oop58-cpp");
+    CheckFactories.registerCheck<bugprone::MutatingCopyCheck>("cert-oop58-cpp");
 
     // C checkers
     // ARR
diff --git a/clang-tools-extra/clang-tidy/cert/CMakeLists.txt b/clang-tools-extra/clang-tidy/cert/CMakeLists.txt
index 453d1d30921e9..0feaf204f8ef4 100644
--- a/clang-tools-extra/clang-tidy/cert/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/cert/CMakeLists.txt
@@ -9,7 +9,6 @@ add_clang_library(clangTidyCERTModule STATIC
   DontModifyStdNamespaceCheck.cpp
   FloatLoopCounter.cpp
   LimitedRandomnessCheck.cpp
-  MutatingCopyCheck.cpp
   NonTrivialTypesLibcMemoryCallsCheck.cpp
   ProperlySeededRandomGeneratorCheck.cpp
   ThrownExceptionTypeCheck.cpp
diff --git a/clang-tools-extra/docs/clang-tidy/checks/bugprone/mutating-copy.rst b/clang-tools-extra/docs/clang-tidy/checks/bugprone/mutating-copy.rst
new file mode 100644
index 0000000000000..137659ea43791
--- /dev/null
+++ b/clang-tools-extra/docs/clang-tidy/checks/bugprone/mutating-copy.rst
@@ -0,0 +1,11 @@
+.. title:: clang-tidy - bugprone-mutating-copy
+
+bugprone-mutating-copy
+======================
+
+Finds assignments to the copied object and its direct or indirect members
+in copy constructors and copy assignment operators.
+
+This check corresponds to the CERT C Coding Standard rule
+`OOP58-CPP. Copy operations must not mutate the source object
+<https://wiki.sei.cmu.edu/confluence/display/cplusplus/OOP58-CPP.+Copy+operations+must+not+mutate+the+source+object>`_.
\ No newline at end of file
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cert/oop58-cpp.rst b/clang-tools-extra/docs/clang-tidy/checks/cert/oop58-cpp.rst
index 399fb1b7e9279..6f16d9c548279 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cert/oop58-cpp.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cert/oop58-cpp.rst
@@ -1,11 +1,10 @@
 .. title:: clang-tidy - cert-mutating-copy
+.. meta::
+   :http-equiv=refresh: 5;URL=../bugprone/mutating-copy.html
 
 cert-oop58-cpp
 ==============
 
-Finds assignments to the copied object and its direct or indirect members
-in copy constructors and copy assignment operators.
-
-This check corresponds to the CERT C Coding Standard rule
-`OOP58-CPP. Copy operations must not mutate the source object
-<https://wiki.sei.cmu.edu/confluence/display/cplusplus/OOP58-CPP.+Copy+operations+must+not+mutate+the+source+object>`_.
+The `cert-oop58-cpp` check is an alias, please see
+:doc:`bugprone-mutating-copy <../bugprone/mutating-copy>`
+for more information.
\ No newline at end of file
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/mutating-copy.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/mutating-copy.cpp
new file mode 100644
index 0000000000000..8b93aa3ee54fc
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/mutating-copy.cpp
@@ -0,0 +1,149 @@
+// RUN: %check_clang_tidy %s bugprone-mutating-copy %t
+
+// Example test cases from CERT rule
+// https://wiki.sei.cmu.edu/confluence/display/cplusplus/OOP58-CPP.+Copy+operations+must+not+mutate+the+source+object
+namespace test_mutating_noncompliant_example {
+class A {
+  mutable int m;
+
+public:
+  A() : m(0) {}
+  explicit A(int m) : m(m) {}
+
+  A(const A &other) : m(other.m) {
+    other.m = 0;
+    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
+  }
+
+  A &operator=(const A &other) {
+    if (&other != this) {
+      m = other.m;
+      other.m = 0;
+      // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: mutating copied object
+    }
+    return *this;
+  }
+
+  int get_m() const { return m; }
+};
+} // namespace test_mutating_noncompliant_example
+
+namespace test_mutating_compliant_example {
+class B {
+  int m;
+
+public:
+  B() : m(0) {}
+  explicit B(int m) : m(m) {}
+
+  B(const B &other) : m(other.m) {}
+  B(B &&other) : m(other.m) {
+    other.m = 0; //no-warning: mutation allowed in move constructor
+  }
+
+  B &operator=(const B &other) {
+    if (&other != this) {
+      m = other.m;
+    }
+    return *this;
+  }
+
+  B &operator=(B &&other) {
+    m = other.m;
+    other.m = 0; //no-warning: mutation allowed in move assignment operator
+    return *this;
+  }
+
+  int get_m() const { return m; }
+};
+} // namespace test_mutating_compliant_example
+
+namespace test_mutating_pointer {
+class C {
+  C *ptr;
+  int value;
+
+  C();
+  C(C &other) {
+    other = {};
+    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
+    other.ptr = nullptr;
+    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
+    other.value = 0;
+    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
+
+    // no-warning: mutating a pointee is allowed
+    other.ptr->value = 0;
+    *other.ptr = {};
+  }
+};
+} // namespace test_mutating_pointer
+
+namespace test_mutating_indirect_member {
+struct S {
+  int x;
+};
+
+class D {
+  S s;
+  D(D &other) {
+    other.s = {};
+    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
+    other.s.x = 0;
+    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
+  }
+};
+} // namespace test_mutating_indirect_member
+
+namespace test_mutating_other_object {
+class E {
+  E();
+  E(E &other) {
+    E tmp;
+    // no-warning: mutating an object that is not the source is allowed
+    tmp = {};
+  }
+};
+} // namespace test_mutating_other_object
+
+namespace test_mutating_member_function {
+class F {
+  int a;
+
+public:
+  void bad_func() { a = 12; }
+  void fine_func() const;
+  void fine_func_2(int x) { x = 5; }
+  void questionable_func();
+
+  F(F &other) : a(other.a) {
+    this->bad_func(); // no-warning: mutating this is allowed
+
+    other.bad_func();
+    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: call mutates copied object
+
+    other.fine_func();
+    other.fine_func_2(42);
+    other.questionable_func();
+  }
+};
+} // namespace test_mutating_member_function
+
+namespace test_mutating_function_on_nested_object {
+struct S {
+  int x;
+  void mutate(int y) {
+    x = y;
+  }
+};
+
+class G {
+  S s;
+  G(G &other) {
+    s.mutate(0); // no-warning: mutating this is allowed
+
+    other.s.mutate(0);
+    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: call mutates copied object
+  }
+};
+} // namespace test_mutating_function_on_nested_object

>From 571e46ab18cbfdcd6f55a96bbb8007d5acf6ceba Mon Sep 17 00:00:00 2001
From: Dasha Buka <102774272+dvbuka at users.noreply.github.com>
Date: Wed, 22 Oct 2025 00:35:13 -0700
Subject: [PATCH 2/8] Add mutating-copy rename to release notes and checks list

---
 clang-tools-extra/docs/ReleaseNotes.rst           | 5 +++++
 clang-tools-extra/docs/clang-tidy/checks/list.rst | 3 ++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 8a0151f567c24..17a2b5c7f9fe1 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -249,6 +249,11 @@ New check aliases
   <clang-tidy/checks/bugprone/throwing-static-initialization>`
   keeping initial check as an alias to the new one.
 
+- Renamed :doc:`cert-oop58-cpp <clang-tidy/checks/cert/oop58-cpp>` to
+  :doc:`bugprone-throwing-static-initialization
+  <clang-tidy/checks/bugprone/mutating-copy>`
+  keeping initial check as an alias to the new one.
+
 Changes in existing checks
 ^^^^^^^^^^^^^^^^^^^^^^^^^^
 
diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst
index a324d18704c01..c7fa88ab0a2e3 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst
@@ -117,6 +117,7 @@ Clang-Tidy Checks
    :doc:`bugprone-misplaced-pointer-arithmetic-in-alloc <bugprone/misplaced-pointer-arithmetic-in-alloc>`, "Yes"
    :doc:`bugprone-misplaced-widening-cast <bugprone/misplaced-widening-cast>`,
    :doc:`bugprone-move-forwarding-reference <bugprone/move-forwarding-reference>`, "Yes"
+   :doc:`bugprone-mutatinb-copy <bugprone/mutating-copy>`,
    :doc:`bugprone-multi-level-implicit-pointer-conversion <bugprone/multi-level-implicit-pointer-conversion>`,
    :doc:`bugprone-multiple-new-in-one-expression <bugprone/multiple-new-in-one-expression>`,
    :doc:`bugprone-multiple-statement-macro <bugprone/multiple-statement-macro>`,
@@ -180,7 +181,6 @@ Clang-Tidy Checks
    :doc:`cert-mem57-cpp <cert/mem57-cpp>`,
    :doc:`cert-msc50-cpp <cert/msc50-cpp>`,
    :doc:`cert-msc51-cpp <cert/msc51-cpp>`,
-   :doc:`cert-oop57-cpp <cert/oop57-cpp>`,
    :doc:`cert-oop58-cpp <cert/oop58-cpp>`,
    :doc:`concurrency-mt-unsafe <concurrency/mt-unsafe>`,
    :doc:`concurrency-thread-canceltype-asynchronous <concurrency/thread-canceltype-asynchronous>`,
@@ -458,6 +458,7 @@ Check aliases
    :doc:`cert-msc54-cpp <cert/msc54-cpp>`, :doc:`bugprone-signal-handler <bugprone/signal-handler>`,
    :doc:`cert-oop11-cpp <cert/oop11-cpp>`, :doc:`performance-move-constructor-init <performance/move-constructor-init>`,
    :doc:`cert-oop54-cpp <cert/oop54-cpp>`, :doc:`bugprone-unhandled-self-assignment <bugprone/unhandled-self-assignment>`,
+   :doc:`cert-oop58-cpp <cert/oop58-cpp>`, :doc:`bugprone-mutating-copy <bugprone/mutating-copy>`,
    :doc:`cert-pos44-c <cert/pos44-c>`, :doc:`bugprone-bad-signal-to-kill-thread <bugprone/bad-signal-to-kill-thread>`,
    :doc:`cert-pos47-c <cert/pos47-c>`, :doc:`concurrency-thread-canceltype-asynchronous <concurrency/thread-canceltype-asynchronous>`,
    :doc:`cert-sig30-c <cert/sig30-c>`, :doc:`bugprone-signal-handler <bugprone/signal-handler>`,

>From c0786cd31f7df405ec6e099581c159e9af25584a Mon Sep 17 00:00:00 2001
From: Dasha Buka <102774272+dvbuka at users.noreply.github.com>
Date: Sat, 25 Oct 2025 10:25:29 -0700
Subject: [PATCH 3/8] Rename oop8-cpp check to
 copy-constructor-mutates-argument

---
 .../bugprone/BugproneTidyModule.cpp           |   5 +-
 .../clang-tidy/bugprone/CMakeLists.txt        |   2 +-
 ...> CopyConstructorMutatesArgumentCheck.cpp} |   8 +-
 ... => CopyConstructorMutatesArgumentCheck.h} |  12 +-
 .../clang-tidy/cert/CERTTidyModule.cpp        |   5 +-
 clang-tools-extra/docs/ReleaseNotes.rst       |   4 +-
 ... => copy-constructor-mutates-argument.rst} |   4 +-
 .../docs/clang-tidy/checks/cert/oop58-cpp.rst |   6 +-
 .../docs/clang-tidy/checks/list.rst           |   4 +-
 .../copy-constructor-mutates-argument.cpp}    |   0
 .../checkers/bugprone/mutating-copy.cpp       | 149 ------------------
 11 files changed, 27 insertions(+), 172 deletions(-)
 rename clang-tools-extra/clang-tidy/bugprone/{MutatingCopyCheck.cpp => CopyConstructorMutatesArgumentCheck.cpp} (91%)
 rename clang-tools-extra/clang-tidy/bugprone/{MutatingCopyCheck.h => CopyConstructorMutatesArgumentCheck.h} (65%)
 rename clang-tools-extra/docs/clang-tidy/checks/bugprone/{mutating-copy.rst => copy-constructor-mutates-argument.rst} (78%)
 rename clang-tools-extra/test/clang-tidy/checkers/{cert/oop58-cpp.cpp => bugprone/copy-constructor-mutates-argument.cpp} (100%)
 delete mode 100644 clang-tools-extra/test/clang-tidy/checkers/bugprone/mutating-copy.cpp

diff --git a/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp b/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
index 79851be690759..3f1379b8f1532 100644
--- a/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
@@ -22,6 +22,7 @@
 #include "CommandProcessorCheck.h"
 #include "ComparePointerToMemberVirtualFunctionCheck.h"
 #include "CopyConstructorInitCheck.h"
+#include "CopyConstructorMutatesArgumentCheck.h"
 #include "CrtpConstructorAccessibilityCheck.h"
 #include "DanglingHandleCheck.h"
 #include "DerivedMethodShadowingBaseMethodCheck.h"
@@ -52,7 +53,6 @@
 #include "MultiLevelImplicitPointerConversionCheck.h"
 #include "MultipleNewInOneExpressionCheck.h"
 #include "MultipleStatementMacroCheck.h"
-#include "MutatingCopyCheck.h"
 #include "NarrowingConversionsCheck.h"
 #include "NoEscapeCheck.h"
 #include "NonZeroEnumToBoolConversionCheck.h"
@@ -199,7 +199,8 @@ class BugproneModule : public ClangTidyModule {
         "bugprone-multiple-new-in-one-expression");
     CheckFactories.registerCheck<MultipleStatementMacroCheck>(
         "bugprone-multiple-statement-macro");
-    CheckFactories.registerCheck<MutatingCopyCheck>("bugprone-mutating-copy");
+    CheckFactories.registerCheck<CopyConstructorMutatesArgumentCheck>(
+        "bugprone-copy-constructor-mutates-argument");
     CheckFactories.registerCheck<NondeterministicPointerIterationOrderCheck>(
         "bugprone-nondeterministic-pointer-iteration-order");
     CheckFactories.registerCheck<OptionalValueConversionCheck>(
diff --git a/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt b/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
index 0dfcd3270cac2..e9b149f3f44e8 100644
--- a/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
@@ -53,7 +53,7 @@ add_clang_library(clangTidyBugproneModule STATIC
   MultiLevelImplicitPointerConversionCheck.cpp
   MultipleNewInOneExpressionCheck.cpp
   MultipleStatementMacroCheck.cpp
-  MutatingCopyCheck.cpp
+  CopyConstructorMutatesArgumentCheck.cpp
   NarrowingConversionsCheck.cpp
   NoEscapeCheck.cpp
   NonZeroEnumToBoolConversionCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.cpp
similarity index 91%
rename from clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.cpp
rename to clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.cpp
index 9485270864618..cbbb1a0070a02 100644
--- a/clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.cpp
@@ -6,7 +6,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "MutatingCopyCheck.h"
+#include "CopyConstructorMutatesArgumentCheck.h"
 #include "clang/AST/ASTContext.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
 
@@ -18,7 +18,8 @@ static constexpr llvm::StringLiteral SourceDeclName = "ChangedPVD";
 static constexpr llvm::StringLiteral MutatingOperatorName = "MutatingOp";
 static constexpr llvm::StringLiteral MutatingCallName = "MutatingCall";
 
-void MutatingCopyCheck::registerMatchers(MatchFinder *Finder) {
+void CopyConstructorMutatesArgumentCheck::registerMatchers(
+    MatchFinder *Finder) {
   const auto MemberExprOrSourceObject = anyOf(
       memberExpr(),
       declRefExpr(to(decl(equalsBoundNode(std::string(SourceDeclName))))));
@@ -60,7 +61,8 @@ void MutatingCopyCheck::registerMatchers(MatchFinder *Finder) {
                      this);
 }
 
-void MutatingCopyCheck::check(const MatchFinder::MatchResult &Result) {
+void CopyConstructorMutatesArgumentCheck::check(
+    const MatchFinder::MatchResult &Result) {
   if (const auto *MemberCall =
           Result.Nodes.getNodeAs<CXXMemberCallExpr>(MutatingCallName))
     diag(MemberCall->getBeginLoc(), "call mutates copied object");
diff --git a/clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.h b/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h
similarity index 65%
rename from clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.h
rename to clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h
index 9d2c8f12f65fa..c573fd3a49348 100644
--- a/clang-tools-extra/clang-tidy/bugprone/MutatingCopyCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h
@@ -6,8 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_MUTATINGCOPYCHECK_H
-#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_MUTATINGCOPYCHECK_H
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENT_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENT_H
 
 #include "../ClangTidyCheck.h"
 
@@ -17,10 +17,10 @@ namespace clang::tidy::bugprone {
 /// in copy constructors and copy assignment operators.
 ///
 /// For the user-facing documentation see:
-/// https://clang.llvm.org/extra/clang-tidy/checks/bugprone/mutating-copy.html
-class MutatingCopyCheck : public ClangTidyCheck {
+/// https://clang.llvm.org/extra/clang-tidy/checks/bugprone/copy-constructor-mutates-argument.html
+class CopyConstructorMutatesArgumentCheck : public ClangTidyCheck {
 public:
-  MutatingCopyCheck(StringRef Name, ClangTidyContext *Context)
+  CopyConstructorMutatesArgumentCheck(StringRef Name, ClangTidyContext *Context)
       : ClangTidyCheck(Name, Context) {}
   bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
     return LangOpts.CPlusPlus;
@@ -31,4 +31,4 @@ class MutatingCopyCheck : public ClangTidyCheck {
 
 } // namespace clang::tidy::bugprone
 
-#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_MUTATINGCOPYCHECK_H
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENT_H
diff --git a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
index 01f33371f52cc..11cd9ec353ce6 100644
--- a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
@@ -11,7 +11,7 @@
 #include "../ClangTidyModuleRegistry.h"
 #include "../bugprone/BadSignalToKillThreadCheck.h"
 #include "../bugprone/CommandProcessorCheck.h"
-#include "../bugprone/MutatingCopyCheck.h"
+#include "../bugprone/CopyConstructorMutatesArgumentCheck.h"
 #include "../bugprone/PointerArithmeticOnPolymorphicObjectCheck.h"
 #include "../bugprone/ReservedIdentifierCheck.h"
 #include "../bugprone/SignalHandlerCheck.h"
@@ -280,7 +280,8 @@ class CERTModule : public ClangTidyModule {
         "cert-oop54-cpp");
     CheckFactories.registerCheck<NonTrivialTypesLibcMemoryCallsCheck>(
         "cert-oop57-cpp");
-    CheckFactories.registerCheck<bugprone::MutatingCopyCheck>("cert-oop58-cpp");
+    CheckFactories.registerCheck<bugprone::CopyConstructorMutatesArgumentCheck>(
+        "cert-oop58-cpp");
 
     // C checkers
     // ARR
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 17a2b5c7f9fe1..f339a512f35ac 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -250,8 +250,8 @@ New check aliases
   keeping initial check as an alias to the new one.
 
 - Renamed :doc:`cert-oop58-cpp <clang-tidy/checks/cert/oop58-cpp>` to
-  :doc:`bugprone-throwing-static-initialization
-  <clang-tidy/checks/bugprone/mutating-copy>`
+  :doc:`bugprone-copy-constructor-mutates-argument
+  <clang-tidy/checks/bugprone/copy-constructor-mutates-argument>`
   keeping initial check as an alias to the new one.
 
 Changes in existing checks
diff --git a/clang-tools-extra/docs/clang-tidy/checks/bugprone/mutating-copy.rst b/clang-tools-extra/docs/clang-tidy/checks/bugprone/copy-constructor-mutates-argument.rst
similarity index 78%
rename from clang-tools-extra/docs/clang-tidy/checks/bugprone/mutating-copy.rst
rename to clang-tools-extra/docs/clang-tidy/checks/bugprone/copy-constructor-mutates-argument.rst
index 137659ea43791..95c295405d32a 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/bugprone/mutating-copy.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/bugprone/copy-constructor-mutates-argument.rst
@@ -1,6 +1,6 @@
-.. title:: clang-tidy - bugprone-mutating-copy
+.. title:: clang-tidy - bugprone-copy-constructor-mutates-argument
 
-bugprone-mutating-copy
+bugprone-copy-constructor-mutates-argument
 ======================
 
 Finds assignments to the copied object and its direct or indirect members
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cert/oop58-cpp.rst b/clang-tools-extra/docs/clang-tidy/checks/cert/oop58-cpp.rst
index 6f16d9c548279..7684f3e8d16e6 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cert/oop58-cpp.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cert/oop58-cpp.rst
@@ -1,10 +1,10 @@
-.. title:: clang-tidy - cert-mutating-copy
+.. title:: clang-tidy - cert-oop58-cpp
 .. meta::
-   :http-equiv=refresh: 5;URL=../bugprone/mutating-copy.html
+   :http-equiv=refresh: 5;URL=../bugprone/bugprone-copy-constructor-mutates-argument.html
 
 cert-oop58-cpp
 ==============
 
 The `cert-oop58-cpp` check is an alias, please see
-:doc:`bugprone-mutating-copy <../bugprone/mutating-copy>`
+:doc:`bugprone-copy-constructor-mutates-argument <../bugprone/bugprone-copy-constructor-mutates-argument>`
 for more information.
\ No newline at end of file
diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst
index c7fa88ab0a2e3..18aa247a774c9 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst
@@ -90,6 +90,7 @@ Clang-Tidy Checks
    :doc:`bugprone-command-processor <bugprone/command-processor>`,
    :doc:`bugprone-compare-pointer-to-member-virtual-function <bugprone/compare-pointer-to-member-virtual-function>`,
    :doc:`bugprone-copy-constructor-init <bugprone/copy-constructor-init>`, "Yes"
+   :doc:`bugprone-copy-constructor-mutates-argument <bugprone/bugprone-copy-constructor-mutates-argument>`,
    :doc:`bugprone-crtp-constructor-accessibility <bugprone/crtp-constructor-accessibility>`, "Yes"
    :doc:`bugprone-dangling-handle <bugprone/dangling-handle>`,
    :doc:`bugprone-derived-method-shadowing-base-method <bugprone/derived-method-shadowing-base-method>`,
@@ -117,7 +118,6 @@ Clang-Tidy Checks
    :doc:`bugprone-misplaced-pointer-arithmetic-in-alloc <bugprone/misplaced-pointer-arithmetic-in-alloc>`, "Yes"
    :doc:`bugprone-misplaced-widening-cast <bugprone/misplaced-widening-cast>`,
    :doc:`bugprone-move-forwarding-reference <bugprone/move-forwarding-reference>`, "Yes"
-   :doc:`bugprone-mutatinb-copy <bugprone/mutating-copy>`,
    :doc:`bugprone-multi-level-implicit-pointer-conversion <bugprone/multi-level-implicit-pointer-conversion>`,
    :doc:`bugprone-multiple-new-in-one-expression <bugprone/multiple-new-in-one-expression>`,
    :doc:`bugprone-multiple-statement-macro <bugprone/multiple-statement-macro>`,
@@ -458,7 +458,7 @@ Check aliases
    :doc:`cert-msc54-cpp <cert/msc54-cpp>`, :doc:`bugprone-signal-handler <bugprone/signal-handler>`,
    :doc:`cert-oop11-cpp <cert/oop11-cpp>`, :doc:`performance-move-constructor-init <performance/move-constructor-init>`,
    :doc:`cert-oop54-cpp <cert/oop54-cpp>`, :doc:`bugprone-unhandled-self-assignment <bugprone/unhandled-self-assignment>`,
-   :doc:`cert-oop58-cpp <cert/oop58-cpp>`, :doc:`bugprone-mutating-copy <bugprone/mutating-copy>`,
+   :doc:`cert-oop58-cpp <cert/oop58-cpp>`, :doc:`bugprone-copy-constructor-mutates-argument <bugprone/copy-constructor-mutates-argument>`,
    :doc:`cert-pos44-c <cert/pos44-c>`, :doc:`bugprone-bad-signal-to-kill-thread <bugprone/bad-signal-to-kill-thread>`,
    :doc:`cert-pos47-c <cert/pos47-c>`, :doc:`concurrency-thread-canceltype-asynchronous <concurrency/thread-canceltype-asynchronous>`,
    :doc:`cert-sig30-c <cert/sig30-c>`, :doc:`bugprone-signal-handler <bugprone/signal-handler>`,
diff --git a/clang-tools-extra/test/clang-tidy/checkers/cert/oop58-cpp.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-mutates-argument.cpp
similarity index 100%
rename from clang-tools-extra/test/clang-tidy/checkers/cert/oop58-cpp.cpp
rename to clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-mutates-argument.cpp
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/mutating-copy.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/mutating-copy.cpp
deleted file mode 100644
index 8b93aa3ee54fc..0000000000000
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/mutating-copy.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-// RUN: %check_clang_tidy %s bugprone-mutating-copy %t
-
-// Example test cases from CERT rule
-// https://wiki.sei.cmu.edu/confluence/display/cplusplus/OOP58-CPP.+Copy+operations+must+not+mutate+the+source+object
-namespace test_mutating_noncompliant_example {
-class A {
-  mutable int m;
-
-public:
-  A() : m(0) {}
-  explicit A(int m) : m(m) {}
-
-  A(const A &other) : m(other.m) {
-    other.m = 0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
-  }
-
-  A &operator=(const A &other) {
-    if (&other != this) {
-      m = other.m;
-      other.m = 0;
-      // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: mutating copied object
-    }
-    return *this;
-  }
-
-  int get_m() const { return m; }
-};
-} // namespace test_mutating_noncompliant_example
-
-namespace test_mutating_compliant_example {
-class B {
-  int m;
-
-public:
-  B() : m(0) {}
-  explicit B(int m) : m(m) {}
-
-  B(const B &other) : m(other.m) {}
-  B(B &&other) : m(other.m) {
-    other.m = 0; //no-warning: mutation allowed in move constructor
-  }
-
-  B &operator=(const B &other) {
-    if (&other != this) {
-      m = other.m;
-    }
-    return *this;
-  }
-
-  B &operator=(B &&other) {
-    m = other.m;
-    other.m = 0; //no-warning: mutation allowed in move assignment operator
-    return *this;
-  }
-
-  int get_m() const { return m; }
-};
-} // namespace test_mutating_compliant_example
-
-namespace test_mutating_pointer {
-class C {
-  C *ptr;
-  int value;
-
-  C();
-  C(C &other) {
-    other = {};
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
-    other.ptr = nullptr;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
-    other.value = 0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
-
-    // no-warning: mutating a pointee is allowed
-    other.ptr->value = 0;
-    *other.ptr = {};
-  }
-};
-} // namespace test_mutating_pointer
-
-namespace test_mutating_indirect_member {
-struct S {
-  int x;
-};
-
-class D {
-  S s;
-  D(D &other) {
-    other.s = {};
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
-    other.s.x = 0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: mutating copied object
-  }
-};
-} // namespace test_mutating_indirect_member
-
-namespace test_mutating_other_object {
-class E {
-  E();
-  E(E &other) {
-    E tmp;
-    // no-warning: mutating an object that is not the source is allowed
-    tmp = {};
-  }
-};
-} // namespace test_mutating_other_object
-
-namespace test_mutating_member_function {
-class F {
-  int a;
-
-public:
-  void bad_func() { a = 12; }
-  void fine_func() const;
-  void fine_func_2(int x) { x = 5; }
-  void questionable_func();
-
-  F(F &other) : a(other.a) {
-    this->bad_func(); // no-warning: mutating this is allowed
-
-    other.bad_func();
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: call mutates copied object
-
-    other.fine_func();
-    other.fine_func_2(42);
-    other.questionable_func();
-  }
-};
-} // namespace test_mutating_member_function
-
-namespace test_mutating_function_on_nested_object {
-struct S {
-  int x;
-  void mutate(int y) {
-    x = y;
-  }
-};
-
-class G {
-  S s;
-  G(G &other) {
-    s.mutate(0); // no-warning: mutating this is allowed
-
-    other.s.mutate(0);
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: call mutates copied object
-  }
-};
-} // namespace test_mutating_function_on_nested_object

>From bc38b0eaa62563c89dfd55ddde60d3320bcbc529 Mon Sep 17 00:00:00 2001
From: Dasha Buka <102774272+dvbuka at users.noreply.github.com>
Date: Sat, 25 Oct 2025 11:18:03 -0700
Subject: [PATCH 4/8] Formatting changes

---
 clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt            | 2 +-
 .../checks/bugprone/copy-constructor-mutates-argument.rst       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt b/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
index e9b149f3f44e8..03fcaf2e087da 100644
--- a/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
@@ -18,6 +18,7 @@ add_clang_library(clangTidyBugproneModule STATIC
   CommandProcessorCheck.cpp
   ComparePointerToMemberVirtualFunctionCheck.cpp
   CopyConstructorInitCheck.cpp
+  CopyConstructorMutatesArgumentCheck.cpp
   CrtpConstructorAccessibilityCheck.cpp
   DanglingHandleCheck.cpp
   DerivedMethodShadowingBaseMethodCheck.cpp
@@ -53,7 +54,6 @@ add_clang_library(clangTidyBugproneModule STATIC
   MultiLevelImplicitPointerConversionCheck.cpp
   MultipleNewInOneExpressionCheck.cpp
   MultipleStatementMacroCheck.cpp
-  CopyConstructorMutatesArgumentCheck.cpp
   NarrowingConversionsCheck.cpp
   NoEscapeCheck.cpp
   NonZeroEnumToBoolConversionCheck.cpp
diff --git a/clang-tools-extra/docs/clang-tidy/checks/bugprone/copy-constructor-mutates-argument.rst b/clang-tools-extra/docs/clang-tidy/checks/bugprone/copy-constructor-mutates-argument.rst
index 95c295405d32a..28e5015beeaad 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/bugprone/copy-constructor-mutates-argument.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/bugprone/copy-constructor-mutates-argument.rst
@@ -1,7 +1,7 @@
 .. title:: clang-tidy - bugprone-copy-constructor-mutates-argument
 
 bugprone-copy-constructor-mutates-argument
-======================
+==========================================
 
 Finds assignments to the copied object and its direct or indirect members
 in copy constructors and copy assignment operators.

>From cdde076714d5f5ae0f6de0d4fe31bb94349a9066 Mon Sep 17 00:00:00 2001
From: Dasha Buka <102774272+dvbuka at users.noreply.github.com>
Date: Sat, 25 Oct 2025 11:20:46 -0700
Subject: [PATCH 5/8] Update name of test to
 bugprone-copy-constructor-mutates-argument

---
 .../checkers/bugprone/copy-constructor-mutates-argument.cpp     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-mutates-argument.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-mutates-argument.cpp
index 223248cb8847f..9fdbb7af90f90 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-mutates-argument.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/copy-constructor-mutates-argument.cpp
@@ -1,4 +1,4 @@
-// RUN: %check_clang_tidy %s cert-oop58-cpp %t
+// RUN: %check_clang_tidy %s bugprone-copy-constructor-mutates-argument %t
 
 // Example test cases from CERT rule
 // https://wiki.sei.cmu.edu/confluence/display/cplusplus/OOP58-CPP.+Copy+operations+must+not+mutate+the+source+object

>From fe088e0ad4270fb9902c16cc328223b43595a8c1 Mon Sep 17 00:00:00 2001
From: Dasha Buka <102774272+dvbuka at users.noreply.github.com>
Date: Mon, 27 Oct 2025 13:48:55 -0700
Subject: [PATCH 6/8] Add check to header

---
 .../bugprone/CopyConstructorMutatesArgumentCheck.h          | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h b/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h
index c573fd3a49348..6ae9524a668d6 100644
--- a/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h
@@ -6,8 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENT_H
-#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENT_H
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENTCHECK_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENTCHECK_H
 
 #include "../ClangTidyCheck.h"
 
@@ -31,4 +31,4 @@ class CopyConstructorMutatesArgumentCheck : public ClangTidyCheck {
 
 } // namespace clang::tidy::bugprone
 
-#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENT_H
+#endif // LLLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENTCHECK_H

>From e62c69c5fe7502b18f28e00cf769fc4344e4a1bc Mon Sep 17 00:00:00 2001
From: Dasha Buka <102774272+dvbuka at users.noreply.github.com>
Date: Mon, 27 Oct 2025 15:44:40 -0700
Subject: [PATCH 7/8] Fix typo in comment

---
 .../clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h b/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h
index 6ae9524a668d6..0fed57258b0d8 100644
--- a/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/CopyConstructorMutatesArgumentCheck.h
@@ -31,4 +31,4 @@ class CopyConstructorMutatesArgumentCheck : public ClangTidyCheck {
 
 } // namespace clang::tidy::bugprone
 
-#endif // LLLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENTCHECK_H
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_COPYCONSTRUCTORMUTATESARGUMENTCHECK_H

>From a21f963cb441d7a246731b074f45c9d8199989ff Mon Sep 17 00:00:00 2001
From: Dasha Buka <102774272+dvbuka at users.noreply.github.com>
Date: Mon, 27 Oct 2025 16:00:42 -0700
Subject: [PATCH 8/8] Typo in new check name

---
 clang-tools-extra/docs/clang-tidy/checks/list.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst
index 18aa247a774c9..a736596c7cf6d 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst
@@ -90,7 +90,7 @@ Clang-Tidy Checks
    :doc:`bugprone-command-processor <bugprone/command-processor>`,
    :doc:`bugprone-compare-pointer-to-member-virtual-function <bugprone/compare-pointer-to-member-virtual-function>`,
    :doc:`bugprone-copy-constructor-init <bugprone/copy-constructor-init>`, "Yes"
-   :doc:`bugprone-copy-constructor-mutates-argument <bugprone/bugprone-copy-constructor-mutates-argument>`,
+   :doc:`bugprone-copy-constructor-mutates-argument <bugprone/copy-constructor-mutates-argument>`,
    :doc:`bugprone-crtp-constructor-accessibility <bugprone/crtp-constructor-accessibility>`, "Yes"
    :doc:`bugprone-dangling-handle <bugprone/dangling-handle>`,
    :doc:`bugprone-derived-method-shadowing-base-method <bugprone/derived-method-shadowing-base-method>`,



More information about the cfe-commits mailing list