[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