[clang-tools-extra] [clang-tidy] Rename 'cert-err52-cpp' to 'modernize-avoid-setjmp-longjmp' (PR #159813)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 22 04:14:20 PDT 2025
https://github.com/zeyi2 updated https://github.com/llvm/llvm-project/pull/159813
>From 414975e7cb52c6cbe0bf3a8304c0661489de63ee Mon Sep 17 00:00:00 2001
From: mtx <mitchell.xu2 at gmail.com>
Date: Sat, 20 Sep 2025 00:44:22 +0800
Subject: [PATCH 1/4] [clang-tidy] Rename 'cert-err52-cpp' to
'bugprone-avoid-setjmp-longjmp'
---
.../AvoidSetjmpLongjmpCheck.cpp} | 20 +++++++++----------
.../AvoidSetjmpLongjmpCheck.h} | 16 +++++++--------
.../bugprone/BugproneTidyModule.cpp | 3 +++
.../clang-tidy/bugprone/CMakeLists.txt | 1 +
.../clang-tidy/cert/CERTTidyModule.cpp | 10 ++++++----
.../clang-tidy/cert/CMakeLists.txt | 1 -
clang-tools-extra/docs/ReleaseNotes.rst | 5 +++++
.../checks/bugprone/avoid-setjmp-longjmp.rst | 10 ++++++++++
.../docs/clang-tidy/checks/cert/err52-cpp.rst | 8 +++-----
.../docs/clang-tidy/checks/list.rst | 3 ++-
.../avoid-setjmp-longjmp.cpp} | 4 ++--
11 files changed, 50 insertions(+), 31 deletions(-)
rename clang-tools-extra/clang-tidy/{cert/SetLongJmpCheck.cpp => bugprone/AvoidSetjmpLongjmpCheck.cpp} (77%)
rename clang-tools-extra/clang-tidy/{cert/SetLongJmpCheck.h => bugprone/AvoidSetjmpLongjmpCheck.h} (65%)
create mode 100644 clang-tools-extra/docs/clang-tidy/checks/bugprone/avoid-setjmp-longjmp.rst
rename clang-tools-extra/test/clang-tidy/checkers/{cert/setlongjmp.cpp => bugprone/avoid-setjmp-longjmp.cpp} (83%)
diff --git a/clang-tools-extra/clang-tidy/cert/SetLongJmpCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.cpp
similarity index 77%
rename from clang-tools-extra/clang-tidy/cert/SetLongJmpCheck.cpp
rename to clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.cpp
index 4f282b2c6b344..d6be7ece24358 100644
--- a/clang-tools-extra/clang-tidy/cert/SetLongJmpCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "SetLongJmpCheck.h"
+#include "AvoidSetjmpLongjmpCheck.h"
#include "clang/AST/ASTContext.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/Frontend/CompilerInstance.h"
@@ -15,17 +15,18 @@
using namespace clang::ast_matchers;
-namespace clang::tidy::cert {
+namespace clang::tidy::bugprone {
namespace {
const char DiagWording[] =
"do not call %0; consider using exception handling instead";
class SetJmpMacroCallbacks : public PPCallbacks {
- SetLongJmpCheck &Check;
+ AvoidSetjmpLongjmpCheck &Check;
public:
- explicit SetJmpMacroCallbacks(SetLongJmpCheck &Check) : Check(Check) {}
+ explicit SetJmpMacroCallbacks(AvoidSetjmpLongjmpCheck &Check)
+ : Check(Check) {}
void MacroExpands(const Token &MacroNameTok, const MacroDefinition &MD,
SourceRange Range, const MacroArgs *Args) override {
@@ -39,15 +40,14 @@ class SetJmpMacroCallbacks : public PPCallbacks {
};
} // namespace
-void SetLongJmpCheck::registerPPCallbacks(const SourceManager &SM,
- Preprocessor *PP,
- Preprocessor *ModuleExpanderPP) {
+void AvoidSetjmpLongjmpCheck::registerPPCallbacks(
+ const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) {
// Per [headers]p5, setjmp must be exposed as a macro instead of a function,
// despite the allowance in C for setjmp to also be an extern function.
PP->addPPCallbacks(std::make_unique<SetJmpMacroCallbacks>(*this));
}
-void SetLongJmpCheck::registerMatchers(MatchFinder *Finder) {
+void AvoidSetjmpLongjmpCheck::registerMatchers(MatchFinder *Finder) {
// In case there is an implementation that happens to define setjmp as a
// function instead of a macro, this will also catch use of it. However, we
// are primarily searching for uses of longjmp.
@@ -57,9 +57,9 @@ void SetLongJmpCheck::registerMatchers(MatchFinder *Finder) {
this);
}
-void SetLongJmpCheck::check(const MatchFinder::MatchResult &Result) {
+void AvoidSetjmpLongjmpCheck::check(const MatchFinder::MatchResult &Result) {
const auto *E = Result.Nodes.getNodeAs<CallExpr>("expr");
diag(E->getExprLoc(), DiagWording) << cast<NamedDecl>(E->getCalleeDecl());
}
-} // namespace clang::tidy::cert
+} // namespace clang::tidy::bugprone
diff --git a/clang-tools-extra/clang-tidy/cert/SetLongJmpCheck.h b/clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.h
similarity index 65%
rename from clang-tools-extra/clang-tidy/cert/SetLongJmpCheck.h
rename to clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.h
index ced3d8cd1b316..c317f9434729f 100644
--- a/clang-tools-extra/clang-tidy/cert/SetLongJmpCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.h
@@ -6,20 +6,20 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_SETLONGJMPCHECK_H
-#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_SETLONGJMPCHECK_H
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_AVOIDSETJMPLONGJMPCHECK_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_AVOIDSETJMPLONGJMPCHECK_H
#include "../ClangTidyCheck.h"
-namespace clang::tidy::cert {
+namespace clang::tidy::bugprone {
/// Guards against use of setjmp/longjmp in C++ code
///
/// For the user-facing documentation see:
-/// http://clang.llvm.org/extra/clang-tidy/checks/cert/err52-cpp.html
-class SetLongJmpCheck : public ClangTidyCheck {
+/// http://clang.llvm.org/extra/clang-tidy/checks/bugprone/avoid-setjmp-longjmp.html
+class AvoidSetjmpLongjmpCheck : public ClangTidyCheck {
public:
- SetLongJmpCheck(StringRef Name, ClangTidyContext *Context)
+ AvoidSetjmpLongjmpCheck(StringRef Name, ClangTidyContext *Context)
: ClangTidyCheck(Name, Context) {}
bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
return LangOpts.CPlusPlus;
@@ -30,6 +30,6 @@ class SetLongJmpCheck : public ClangTidyCheck {
Preprocessor *ModuleExpanderPP) override;
};
-} // namespace clang::tidy::cert
+} // namespace clang::tidy::bugprone
-#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_SETLONGJMPCHECK_H
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_AVOIDSETJMPLONGJMPCHECK_H
diff --git a/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp b/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
index 8baa8f6b35d4c..7897ba5752776 100644
--- a/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
@@ -12,6 +12,7 @@
#include "ArgumentCommentCheck.h"
#include "AssertSideEffectCheck.h"
#include "AssignmentInIfConditionCheck.h"
+#include "AvoidSetjmpLongjmpCheck.h"
#include "BadSignalToKillThreadCheck.h"
#include "BitwisePointerCastCheck.h"
#include "BoolPointerImplicitConversionCheck.h"
@@ -117,6 +118,8 @@ class BugproneModule : public ClangTidyModule {
"bugprone-assert-side-effect");
CheckFactories.registerCheck<AssignmentInIfConditionCheck>(
"bugprone-assignment-in-if-condition");
+ CheckFactories.registerCheck<AvoidSetjmpLongjmpCheck>(
+ "bugprone-avoid-setjmp-longjmp");
CheckFactories.registerCheck<BadSignalToKillThreadCheck>(
"bugprone-bad-signal-to-kill-thread");
CheckFactories.registerCheck<BitwisePointerCastCheck>(
diff --git a/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt b/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
index b0dbe84a16cd4..4f4abc741b668 100644
--- a/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
@@ -7,6 +7,7 @@ add_clang_library(clangTidyBugproneModule STATIC
ArgumentCommentCheck.cpp
AssertSideEffectCheck.cpp
AssignmentInIfConditionCheck.cpp
+ AvoidSetjmpLongjmpCheck.cpp
BadSignalToKillThreadCheck.cpp
BitwisePointerCastCheck.cpp
BoolPointerImplicitConversionCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
index c60397384e273..4f4fefa8c9b25 100644
--- a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
@@ -9,6 +9,7 @@
#include "../ClangTidy.h"
#include "../ClangTidyModule.h"
#include "../ClangTidyModuleRegistry.h"
+#include "../bugprone/AvoidSetjmpLongjmpCheck.h"
#include "../bugprone/BadSignalToKillThreadCheck.h"
#include "../bugprone/PointerArithmeticOnPolymorphicObjectCheck.h"
#include "../bugprone/ReservedIdentifierCheck.h"
@@ -40,14 +41,13 @@
#include "MutatingCopyCheck.h"
#include "NonTrivialTypesLibcMemoryCallsCheck.h"
#include "ProperlySeededRandomGeneratorCheck.h"
-#include "SetLongJmpCheck.h"
#include "ThrownExceptionTypeCheck.h"
namespace {
// Checked functions for cert-err33-c.
-// The following functions are deliberately excluded because they can be called
-// with NULL argument and in this case the check is not applicable:
+// The following functions are deliberately excluded because they can be
+// called with NULL argument and in this case the check is not applicable:
// `mblen, mbrlen, mbrtowc, mbtowc, wctomb, wctomb_s`.
// FIXME: The check can be improved to handle such cases.
const llvm::StringRef CertErr33CCheckedFunctions = "^::aligned_alloc$;"
@@ -257,9 +257,11 @@ class CERTModule : public ClangTidyModule {
// ERR
CheckFactories.registerCheck<misc::ThrowByValueCatchByReferenceCheck>(
"cert-err09-cpp");
- CheckFactories.registerCheck<SetLongJmpCheck>("cert-err52-cpp");
+ CheckFactories.registerCheck<bugprone::AvoidSetjmpLongjmpCheck>(
+ "cert-err52-cpp");
CheckFactories.registerCheck<bugprone::ThrowingStaticInitializationCheck>(
"cert-err58-cpp");
+ CheckFactories.registerCheck<StaticObjectExceptionCheck>("cert-err58-cpp");
CheckFactories.registerCheck<ThrownExceptionTypeCheck>("cert-err60-cpp");
CheckFactories.registerCheck<misc::ThrowByValueCatchByReferenceCheck>(
"cert-err61-cpp");
diff --git a/clang-tools-extra/clang-tidy/cert/CMakeLists.txt b/clang-tools-extra/clang-tidy/cert/CMakeLists.txt
index aee7ba171fac0..4933763f03fb5 100644
--- a/clang-tools-extra/clang-tidy/cert/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/cert/CMakeLists.txt
@@ -13,7 +13,6 @@ add_clang_library(clangTidyCERTModule STATIC
MutatingCopyCheck.cpp
NonTrivialTypesLibcMemoryCallsCheck.cpp
ProperlySeededRandomGeneratorCheck.cpp
- SetLongJmpCheck.cpp
ThrownExceptionTypeCheck.cpp
LINK_LIBS
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index d352f54e2b8dd..64a514da4e9d6 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -216,6 +216,11 @@ New check aliases
<clang-tidy/checks/bugprone/unchecked-string-to-number-conversion>`
keeping initial check as an alias to the new one.
+- Renamed :doc:`cert-err52-cpp <clang-tidy/checks/cert/err52-cpp>` to
+ :doc:`bugprone-avoid-setjmp-longjmp
+ <clang-tidy/checks/bugprone/avoid-setjmp-longjmp>`
+ keeping initial check as an alias to the new one.
+
- Renamed :doc:`cert-err58-cpp <clang-tidy/checks/cert/err58-cpp>` to
:doc:`bugprone-throwing-static-initialization
<clang-tidy/checks/bugprone/throwing-static-initialization>`
diff --git a/clang-tools-extra/docs/clang-tidy/checks/bugprone/avoid-setjmp-longjmp.rst b/clang-tools-extra/docs/clang-tidy/checks/bugprone/avoid-setjmp-longjmp.rst
new file mode 100644
index 0000000000000..e3229d82767e2
--- /dev/null
+++ b/clang-tools-extra/docs/clang-tidy/checks/bugprone/avoid-setjmp-longjmp.rst
@@ -0,0 +1,10 @@
+.. title:: clang-tidy - bugprone-avoid-setjmp-longjmp
+
+bugprone-avoid-setjmp-longjmp
+=============================
+
+Flags all call expressions involving ``setjmp()`` and ``longjmp()``.
+
+This check corresponds to the CERT C++ Coding Standard rule
+`ERR52-CPP. Do not use setjmp() or longjmp()
+<https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=88046492>`_.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst b/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst
index a29dc7bcd3243..000ebc3ce6a89 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst
@@ -3,8 +3,6 @@
cert-err52-cpp
==============
-This check flags all call expressions involving ``setjmp()`` and ``longjmp()``.
-
-This check corresponds to the CERT C++ Coding Standard rule
-`ERR52-CPP. Do not use setjmp() or longjmp()
-<https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=1834>`_.
+The cert-err52-cpp check is an alias, please see
+`bugprone-avoid-setjmp-longjmp <../bugprone/avoid-setjmp-longjmp.html>`_
+for more information.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst
index 2f05b2ee400a7..f310db3870de4 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst
@@ -80,6 +80,7 @@ Clang-Tidy Checks
:doc:`bugprone-argument-comment <bugprone/argument-comment>`, "Yes"
:doc:`bugprone-assert-side-effect <bugprone/assert-side-effect>`,
:doc:`bugprone-assignment-in-if-condition <bugprone/assignment-in-if-condition>`,
+ :doc:`bugprone-avoid-setjmp-longjmp <bugprone/avoid-setjmp-longjmp>`,
:doc:`bugprone-bad-signal-to-kill-thread <bugprone/bad-signal-to-kill-thread>`,
:doc:`bugprone-bitwise-pointer-cast <bugprone/bitwise-pointer-cast>`,
:doc:`bugprone-bool-pointer-implicit-conversion <bugprone/bool-pointer-implicit-conversion>`, "Yes"
@@ -175,7 +176,6 @@ Clang-Tidy Checks
:doc:`cert-dcl58-cpp <cert/dcl58-cpp>`,
:doc:`cert-env33-c <cert/env33-c>`,
:doc:`cert-err33-c <cert/err33-c>`,
- :doc:`cert-err52-cpp <cert/err52-cpp>`,
:doc:`cert-err60-cpp <cert/err60-cpp>`,
:doc:`cert-flp30-c <cert/flp30-c>`,
:doc:`cert-mem57-cpp <cert/mem57-cpp>`,
@@ -441,6 +441,7 @@ Check aliases
:doc:`cert-dcl59-cpp <cert/dcl59-cpp>`, :doc:`google-build-namespaces <google/build-namespaces>`,
:doc:`cert-err09-cpp <cert/err09-cpp>`, :doc:`misc-throw-by-value-catch-by-reference <misc/throw-by-value-catch-by-reference>`,
:doc:`cert-err34-c <cert/err34-c>`, :doc:`bugprone-unchecked-string-to-number-conversion <bugprone/unchecked-string-to-number-conversion>`,
+ :doc:`cert-err52-cpp <cert/err52-cpp>`, :doc:`bugprone-avoid-setjmp-longjmp <bugprone/avoid-setjmp-longjmp>`,
:doc:`cert-err58-cpp <cert/err58-cpp>`, :doc:`bugprone-throwing-static-initialization <bugprone/throwing-static-initialization>`,
:doc:`cert-err61-cpp <cert/err61-cpp>`, :doc:`misc-throw-by-value-catch-by-reference <misc/throw-by-value-catch-by-reference>`,
:doc:`cert-exp42-c <cert/exp42-c>`, :doc:`bugprone-suspicious-memory-comparison <bugprone/suspicious-memory-comparison>`,
diff --git a/clang-tools-extra/test/clang-tidy/checkers/cert/setlongjmp.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/avoid-setjmp-longjmp.cpp
similarity index 83%
rename from clang-tools-extra/test/clang-tidy/checkers/cert/setlongjmp.cpp
rename to clang-tools-extra/test/clang-tidy/checkers/bugprone/avoid-setjmp-longjmp.cpp
index 88d1db35f6b6a..751ad005db102 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/cert/setlongjmp.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/avoid-setjmp-longjmp.cpp
@@ -1,4 +1,4 @@
-// RUN: %check_clang_tidy %s cert-err52-cpp %t
+// RUN: %check_clang_tidy %s bugprone-avoid-setjmp-longjmp %t
typedef void *jmp_buf;
extern int __setjmpimpl(jmp_buf);
@@ -13,7 +13,7 @@ using ::longjmp;
static jmp_buf env;
void g() {
std::longjmp(env, 1);
- // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not call 'longjmp'; consider using exception handling instead [cert-err52-cpp]
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not call 'longjmp'; consider using exception handling instead [bugprone-avoid-setjmp-longjmp]
::longjmp(env, 1);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not call 'longjmp'; consider using exception handling instead
longjmp(env, 1);
>From bd26b60feb251fb65d58c4ee5cb5de1ddb8e8dd8 Mon Sep 17 00:00:00 2001
From: mtx <mitchell.xu2 at gmail.com>
Date: Mon, 22 Sep 2025 11:17:13 +0800
Subject: [PATCH 2/4] move `avoid-setjmp-longjmp` from `bugprone` to
`modernize`
---
.../clang-tidy/bugprone/BugproneTidyModule.cpp | 3 ---
clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt | 1 -
clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp | 5 ++---
.../AvoidSetjmpLongjmpCheck.cpp | 4 ++--
.../AvoidSetjmpLongjmpCheck.h | 12 ++++++------
.../clang-tidy/modernize/CMakeLists.txt | 1 +
.../clang-tidy/modernize/ModernizeTidyModule.cpp | 3 +++
clang-tools-extra/docs/ReleaseNotes.rst | 4 ++--
.../docs/clang-tidy/checks/cert/err52-cpp.rst | 6 +++++-
clang-tools-extra/docs/clang-tidy/checks/list.rst | 4 ++--
.../{bugprone => modernize}/avoid-setjmp-longjmp.rst | 6 +++---
.../{bugprone => modernize}/avoid-setjmp-longjmp.cpp | 4 ++--
12 files changed, 28 insertions(+), 25 deletions(-)
rename clang-tools-extra/clang-tidy/{bugprone => modernize}/AvoidSetjmpLongjmpCheck.cpp (96%)
rename clang-tools-extra/clang-tidy/{bugprone => modernize}/AvoidSetjmpLongjmpCheck.h (73%)
rename clang-tools-extra/docs/clang-tidy/checks/{bugprone => modernize}/avoid-setjmp-longjmp.rst (69%)
rename clang-tools-extra/test/clang-tidy/checkers/{bugprone => modernize}/avoid-setjmp-longjmp.cpp (83%)
diff --git a/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp b/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
index 7897ba5752776..8baa8f6b35d4c 100644
--- a/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp
@@ -12,7 +12,6 @@
#include "ArgumentCommentCheck.h"
#include "AssertSideEffectCheck.h"
#include "AssignmentInIfConditionCheck.h"
-#include "AvoidSetjmpLongjmpCheck.h"
#include "BadSignalToKillThreadCheck.h"
#include "BitwisePointerCastCheck.h"
#include "BoolPointerImplicitConversionCheck.h"
@@ -118,8 +117,6 @@ class BugproneModule : public ClangTidyModule {
"bugprone-assert-side-effect");
CheckFactories.registerCheck<AssignmentInIfConditionCheck>(
"bugprone-assignment-in-if-condition");
- CheckFactories.registerCheck<AvoidSetjmpLongjmpCheck>(
- "bugprone-avoid-setjmp-longjmp");
CheckFactories.registerCheck<BadSignalToKillThreadCheck>(
"bugprone-bad-signal-to-kill-thread");
CheckFactories.registerCheck<BitwisePointerCastCheck>(
diff --git a/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt b/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
index 4f4abc741b668..b0dbe84a16cd4 100644
--- a/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/bugprone/CMakeLists.txt
@@ -7,7 +7,6 @@ add_clang_library(clangTidyBugproneModule STATIC
ArgumentCommentCheck.cpp
AssertSideEffectCheck.cpp
AssignmentInIfConditionCheck.cpp
- AvoidSetjmpLongjmpCheck.cpp
BadSignalToKillThreadCheck.cpp
BitwisePointerCastCheck.cpp
BoolPointerImplicitConversionCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
index 4f4fefa8c9b25..9ba62219afee9 100644
--- a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
@@ -9,7 +9,6 @@
#include "../ClangTidy.h"
#include "../ClangTidyModule.h"
#include "../ClangTidyModuleRegistry.h"
-#include "../bugprone/AvoidSetjmpLongjmpCheck.h"
#include "../bugprone/BadSignalToKillThreadCheck.h"
#include "../bugprone/PointerArithmeticOnPolymorphicObjectCheck.h"
#include "../bugprone/ReservedIdentifierCheck.h"
@@ -29,6 +28,7 @@
#include "../misc/NonCopyableObjects.h"
#include "../misc/StaticAssertCheck.h"
#include "../misc/ThrowByValueCatchByReferenceCheck.h"
+#include "../modernize/AvoidSetjmpLongjmpCheck.h"
#include "../modernize/AvoidVariadicFunctionsCheck.h"
#include "../performance/MoveConstructorInitCheck.h"
#include "../readability/EnumInitialValueCheck.h"
@@ -257,11 +257,10 @@ class CERTModule : public ClangTidyModule {
// ERR
CheckFactories.registerCheck<misc::ThrowByValueCatchByReferenceCheck>(
"cert-err09-cpp");
- CheckFactories.registerCheck<bugprone::AvoidSetjmpLongjmpCheck>(
+ CheckFactories.registerCheck<modernize::AvoidSetjmpLongjmpCheck>(
"cert-err52-cpp");
CheckFactories.registerCheck<bugprone::ThrowingStaticInitializationCheck>(
"cert-err58-cpp");
- CheckFactories.registerCheck<StaticObjectExceptionCheck>("cert-err58-cpp");
CheckFactories.registerCheck<ThrownExceptionTypeCheck>("cert-err60-cpp");
CheckFactories.registerCheck<misc::ThrowByValueCatchByReferenceCheck>(
"cert-err61-cpp");
diff --git a/clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.cpp b/clang-tools-extra/clang-tidy/modernize/AvoidSetjmpLongjmpCheck.cpp
similarity index 96%
rename from clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.cpp
rename to clang-tools-extra/clang-tidy/modernize/AvoidSetjmpLongjmpCheck.cpp
index d6be7ece24358..fbcde0a8bbd19 100644
--- a/clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/AvoidSetjmpLongjmpCheck.cpp
@@ -15,7 +15,7 @@
using namespace clang::ast_matchers;
-namespace clang::tidy::bugprone {
+namespace clang::tidy::modernize {
namespace {
const char DiagWording[] =
@@ -62,4 +62,4 @@ void AvoidSetjmpLongjmpCheck::check(const MatchFinder::MatchResult &Result) {
diag(E->getExprLoc(), DiagWording) << cast<NamedDecl>(E->getCalleeDecl());
}
-} // namespace clang::tidy::bugprone
+} // namespace clang::tidy::modernize
diff --git a/clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.h b/clang-tools-extra/clang-tidy/modernize/AvoidSetjmpLongjmpCheck.h
similarity index 73%
rename from clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.h
rename to clang-tools-extra/clang-tidy/modernize/AvoidSetjmpLongjmpCheck.h
index c317f9434729f..23a1cd169e152 100644
--- a/clang-tools-extra/clang-tidy/bugprone/AvoidSetjmpLongjmpCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/AvoidSetjmpLongjmpCheck.h
@@ -6,17 +6,17 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_AVOIDSETJMPLONGJMPCHECK_H
-#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_AVOIDSETJMPLONGJMPCHECK_H
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_AVOIDSETJMPLONGJMPCHECK_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_AVOIDSETJMPLONGJMPCHECK_H
#include "../ClangTidyCheck.h"
-namespace clang::tidy::bugprone {
+namespace clang::tidy::modernize {
/// Guards against use of setjmp/longjmp in C++ code
///
/// For the user-facing documentation see:
-/// http://clang.llvm.org/extra/clang-tidy/checks/bugprone/avoid-setjmp-longjmp.html
+/// http://clang.llvm.org/extra/clang-tidy/checks/modernize/avoid-setjmp-longjmp.html
class AvoidSetjmpLongjmpCheck : public ClangTidyCheck {
public:
AvoidSetjmpLongjmpCheck(StringRef Name, ClangTidyContext *Context)
@@ -30,6 +30,6 @@ class AvoidSetjmpLongjmpCheck : public ClangTidyCheck {
Preprocessor *ModuleExpanderPP) override;
};
-} // namespace clang::tidy::bugprone
+} // namespace clang::tidy::modernize
-#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_AVOIDSETJMPLONGJMPCHECK_H
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_AVOIDSETJMPLONGJMPCHECK_H
diff --git a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
index bee6bb2b1d5df..882f2dc9fb4d8 100644
--- a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
@@ -6,6 +6,7 @@ set(LLVM_LINK_COMPONENTS
add_clang_library(clangTidyModernizeModule STATIC
AvoidBindCheck.cpp
AvoidCArraysCheck.cpp
+ AvoidSetjmpLongjmpCheck.cpp
AvoidVariadicFunctionsCheck.cpp
ConcatNestedNamespacesCheck.cpp
DeprecatedHeadersCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp
index 244b819f5fe50..360e2b8434d0c 100644
--- a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp
@@ -11,6 +11,7 @@
#include "../ClangTidyModuleRegistry.h"
#include "AvoidBindCheck.h"
#include "AvoidCArraysCheck.h"
+#include "AvoidSetjmpLongjmpCheck.h"
#include "AvoidVariadicFunctionsCheck.h"
#include "ConcatNestedNamespacesCheck.h"
#include "DeprecatedHeadersCheck.h"
@@ -64,6 +65,8 @@ class ModernizeModule : public ClangTidyModule {
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
CheckFactories.registerCheck<AvoidBindCheck>("modernize-avoid-bind");
CheckFactories.registerCheck<AvoidCArraysCheck>("modernize-avoid-c-arrays");
+ CheckFactories.registerCheck<AvoidSetjmpLongjmpCheck>(
+ "modernize-avoid-setjmp-longjmp");
CheckFactories.registerCheck<AvoidVariadicFunctionsCheck>(
"modernize-avoid-variadic-functions");
CheckFactories.registerCheck<ConcatNestedNamespacesCheck>(
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 64a514da4e9d6..bc916396a14ca 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -217,8 +217,8 @@ New check aliases
keeping initial check as an alias to the new one.
- Renamed :doc:`cert-err52-cpp <clang-tidy/checks/cert/err52-cpp>` to
- :doc:`bugprone-avoid-setjmp-longjmp
- <clang-tidy/checks/bugprone/avoid-setjmp-longjmp>`
+ :doc:`modernize-avoid-setjmp-longjmp
+ <clang-tidy/checks/modernize/avoid-setjmp-longjmp>`
keeping initial check as an alias to the new one.
- Renamed :doc:`cert-err58-cpp <clang-tidy/checks/cert/err58-cpp>` to
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst b/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst
index 000ebc3ce6a89..2f5da1a105b3e 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst
@@ -4,5 +4,9 @@ cert-err52-cpp
==============
The cert-err52-cpp check is an alias, please see
-`bugprone-avoid-setjmp-longjmp <../bugprone/avoid-setjmp-longjmp.html>`_
+`modernize-avoid-setjmp-longjmp <../modernize/avoid-setjmp-longjmp.html>`_
for more information.
+
+This check corresponds to the CERT C++ Coding Standard rule
+`ERR52-CPP. Do not use setjmp() or longjmp()
+<https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=1834>`_.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst
index f310db3870de4..472d509101cdb 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst
@@ -80,7 +80,6 @@ Clang-Tidy Checks
:doc:`bugprone-argument-comment <bugprone/argument-comment>`, "Yes"
:doc:`bugprone-assert-side-effect <bugprone/assert-side-effect>`,
:doc:`bugprone-assignment-in-if-condition <bugprone/assignment-in-if-condition>`,
- :doc:`bugprone-avoid-setjmp-longjmp <bugprone/avoid-setjmp-longjmp>`,
:doc:`bugprone-bad-signal-to-kill-thread <bugprone/bad-signal-to-kill-thread>`,
:doc:`bugprone-bitwise-pointer-cast <bugprone/bitwise-pointer-cast>`,
:doc:`bugprone-bool-pointer-implicit-conversion <bugprone/bool-pointer-implicit-conversion>`, "Yes"
@@ -287,6 +286,7 @@ Clang-Tidy Checks
:doc:`misc-use-internal-linkage <misc/use-internal-linkage>`, "Yes"
:doc:`modernize-avoid-bind <modernize/avoid-bind>`, "Yes"
:doc:`modernize-avoid-c-arrays <modernize/avoid-c-arrays>`,
+ :doc:`modernize-avoid-setjmp-longjmp <modernize/avoid-setjmp-longjmp>`,
:doc:`modernize-avoid-variadic-functions <modernize/avoid-variadic-functions>`,
:doc:`modernize-concat-nested-namespaces <modernize/concat-nested-namespaces>`, "Yes"
:doc:`modernize-deprecated-headers <modernize/deprecated-headers>`, "Yes"
@@ -441,7 +441,7 @@ Check aliases
:doc:`cert-dcl59-cpp <cert/dcl59-cpp>`, :doc:`google-build-namespaces <google/build-namespaces>`,
:doc:`cert-err09-cpp <cert/err09-cpp>`, :doc:`misc-throw-by-value-catch-by-reference <misc/throw-by-value-catch-by-reference>`,
:doc:`cert-err34-c <cert/err34-c>`, :doc:`bugprone-unchecked-string-to-number-conversion <bugprone/unchecked-string-to-number-conversion>`,
- :doc:`cert-err52-cpp <cert/err52-cpp>`, :doc:`bugprone-avoid-setjmp-longjmp <bugprone/avoid-setjmp-longjmp>`,
+ :doc:`cert-err52-cpp <cert/err52-cpp>`, :doc:`modernize-avoid-setjmp-longjmp <modernize/avoid-setjmp-longjmp>`,
:doc:`cert-err58-cpp <cert/err58-cpp>`, :doc:`bugprone-throwing-static-initialization <bugprone/throwing-static-initialization>`,
:doc:`cert-err61-cpp <cert/err61-cpp>`, :doc:`misc-throw-by-value-catch-by-reference <misc/throw-by-value-catch-by-reference>`,
:doc:`cert-exp42-c <cert/exp42-c>`, :doc:`bugprone-suspicious-memory-comparison <bugprone/suspicious-memory-comparison>`,
diff --git a/clang-tools-extra/docs/clang-tidy/checks/bugprone/avoid-setjmp-longjmp.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst
similarity index 69%
rename from clang-tools-extra/docs/clang-tidy/checks/bugprone/avoid-setjmp-longjmp.rst
rename to clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst
index e3229d82767e2..9748d2bdf3be7 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/bugprone/avoid-setjmp-longjmp.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst
@@ -1,7 +1,7 @@
-.. title:: clang-tidy - bugprone-avoid-setjmp-longjmp
+.. title:: clang-tidy - modernize-avoid-setjmp-longjmp
-bugprone-avoid-setjmp-longjmp
-=============================
+modernize-avoid-setjmp-longjmp
+==============================
Flags all call expressions involving ``setjmp()`` and ``longjmp()``.
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/avoid-setjmp-longjmp.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/avoid-setjmp-longjmp.cpp
similarity index 83%
rename from clang-tools-extra/test/clang-tidy/checkers/bugprone/avoid-setjmp-longjmp.cpp
rename to clang-tools-extra/test/clang-tidy/checkers/modernize/avoid-setjmp-longjmp.cpp
index 751ad005db102..cb5ac8df56bf6 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/avoid-setjmp-longjmp.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/avoid-setjmp-longjmp.cpp
@@ -1,4 +1,4 @@
-// RUN: %check_clang_tidy %s bugprone-avoid-setjmp-longjmp %t
+// RUN: %check_clang_tidy %s modernize-avoid-setjmp-longjmp %t
typedef void *jmp_buf;
extern int __setjmpimpl(jmp_buf);
@@ -13,7 +13,7 @@ using ::longjmp;
static jmp_buf env;
void g() {
std::longjmp(env, 1);
- // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not call 'longjmp'; consider using exception handling instead [bugprone-avoid-setjmp-longjmp]
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not call 'longjmp'; consider using exception handling instead [modernize-avoid-setjmp-longjmp]
::longjmp(env, 1);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not call 'longjmp'; consider using exception handling instead
longjmp(env, 1);
>From 091f302ac29793df194a014d3b250d73cc26c2e6 Mon Sep 17 00:00:00 2001
From: mtx <mitchell.xu2 at gmail.com>
Date: Mon, 22 Sep 2025 18:17:40 +0800
Subject: [PATCH 3/4] Fix the docs
---
clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst | 2 +-
.../clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst | 5 ++++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst b/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst
index 2f5da1a105b3e..144d209b356d7 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cert/err52-cpp.rst
@@ -3,7 +3,7 @@
cert-err52-cpp
==============
-The cert-err52-cpp check is an alias, please see
+The `cert-err52-cpp` check is an alias, please see
`modernize-avoid-setjmp-longjmp <../modernize/avoid-setjmp-longjmp.html>`_
for more information.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst
index 9748d2bdf3be7..99e254dd086d8 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst
@@ -3,7 +3,10 @@
modernize-avoid-setjmp-longjmp
==============================
-Flags all call expressions involving ``setjmp()`` and ``longjmp()``.
+Flags all call expressions involving ``setjmp()`` and ``longjmp()`` in C++ code.
+
+References
+----------
This check corresponds to the CERT C++ Coding Standard rule
`ERR52-CPP. Do not use setjmp() or longjmp()
>From e75ab2199a8ee1e4083903b60fcb01b646627294 Mon Sep 17 00:00:00 2001
From: mtx <mitchell.xu2 at gmail.com>
Date: Mon, 22 Sep 2025 19:12:06 +0800
Subject: [PATCH 4/4] Fix instructions in docs
---
.../docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst | 2 ++
1 file changed, 2 insertions(+)
diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst
index 99e254dd086d8..ae45619a01945 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-setjmp-longjmp.rst
@@ -5,6 +5,8 @@ modernize-avoid-setjmp-longjmp
Flags all call expressions involving ``setjmp()`` and ``longjmp()`` in C++ code.
+Exception handling with ``throw`` and ``catch`` should be used instead.
+
References
----------
More information about the cfe-commits
mailing list