https://github.com/vbvictor updated https://github.com/llvm/llvm-project/pull/157737
>From d2d7a00a4199329e32557f6787462f4ade948cbc Mon Sep 17 00:00:00 2001 From: Victor Baranov <bar.victor.2...@gmail.com> Date: Tue, 9 Sep 2025 22:26:21 +0300 Subject: [PATCH 1/2] [clang-tidy] Rename 'cert-dcl50-cpp' to 'modernize-avoid-variadic-functions' --- .../clang-tidy/cert/CERTTidyModule.cpp | 5 +-- .../clang-tidy/cert/CMakeLists.txt | 2 +- .../cert/VariadicFunctionDefCheck.h | 33 ------------------- .../AvoidVariadicFunctionsCheck.cpp} | 13 ++++---- .../modernize/AvoidVariadicFunctionsCheck.h | 33 +++++++++++++++++++ .../clang-tidy/modernize/CMakeLists.txt | 1 + .../modernize/ModernizeTidyModule.cpp | 3 ++ clang-tools-extra/docs/ReleaseNotes.rst | 5 +++ .../docs/clang-tidy/checks/cert/dcl50-cpp.rst | 11 +++---- .../docs/clang-tidy/checks/list.rst | 3 +- .../modernize/avoid-variadic-functions.rst | 17 ++++++++++ .../avoid-variadic-functions.cpp} | 4 +-- 12 files changed, 79 insertions(+), 51 deletions(-) delete mode 100644 clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.h rename clang-tools-extra/clang-tidy/{cert/VariadicFunctionDefCheck.cpp => modernize/AvoidVariadicFunctionsCheck.cpp} (71%) create mode 100644 clang-tools-extra/clang-tidy/modernize/AvoidVariadicFunctionsCheck.h create mode 100644 clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-variadic-functions.rst rename clang-tools-extra/test/clang-tidy/checkers/{cert/variadic-function-def.cpp => modernize/avoid-variadic-functions.cpp} (85%) diff --git a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp index a0d0ac1007c3e..8bb645f46e38d 100644 --- a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp +++ b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp @@ -27,6 +27,7 @@ #include "../misc/NonCopyableObjects.h" #include "../misc/StaticAssertCheck.h" #include "../misc/ThrowByValueCatchByReferenceCheck.h" +#include "../modernize/AvoidVariadicFunctionsCheck.h" #include "../performance/MoveConstructorInitCheck.h" #include "../readability/EnumInitialValueCheck.h" #include "../readability/UppercaseLiteralSuffixCheck.h" @@ -41,7 +42,6 @@ #include "SetLongJmpCheck.h" #include "StaticObjectExceptionCheck.h" #include "ThrownExceptionTypeCheck.h" -#include "VariadicFunctionDefCheck.h" namespace { @@ -245,7 +245,8 @@ class CERTModule : public ClangTidyModule { .registerCheck<bugprone::PointerArithmeticOnPolymorphicObjectCheck>( "cert-ctr56-cpp"); // DCL - CheckFactories.registerCheck<VariadicFunctionDefCheck>("cert-dcl50-cpp"); + CheckFactories.registerCheck<modernize::AvoidVariadicFunctionsCheck>( + "cert-dcl50-cpp"); CheckFactories.registerCheck<bugprone::ReservedIdentifierCheck>( "cert-dcl51-cpp"); CheckFactories.registerCheck<misc::NewDeleteOverloadsCheck>( diff --git a/clang-tools-extra/clang-tidy/cert/CMakeLists.txt b/clang-tools-extra/clang-tidy/cert/CMakeLists.txt index eebbf907cc94e..6bbd6856a09bb 100644 --- a/clang-tools-extra/clang-tidy/cert/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/cert/CMakeLists.txt @@ -16,7 +16,6 @@ add_clang_library(clangTidyCERTModule STATIC SetLongJmpCheck.cpp StaticObjectExceptionCheck.cpp ThrownExceptionTypeCheck.cpp - VariadicFunctionDefCheck.cpp LINK_LIBS clangTidy @@ -24,6 +23,7 @@ add_clang_library(clangTidyCERTModule STATIC clangTidyConcurrencyModule clangTidyGoogleModule clangTidyMiscModule + clangTidyModernizeModule clangTidyPerformanceModule clangTidyReadabilityModule clangTidyUtils diff --git a/clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.h b/clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.h deleted file mode 100644 index a082e370c3228..0000000000000 --- a/clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.h +++ /dev/null @@ -1,33 +0,0 @@ -//===--- VariadicFunctionDefCheck.h - clang-tidy-----------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CERT_VARIADICFUNCTIONDEF_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CERT_VARIADICFUNCTIONDEF_H - -#include "../ClangTidyCheck.h" - -namespace clang::tidy::cert { - -/// Guards against any C-style variadic function definitions (not declarations). -/// -/// For the user-facing documentation see: -/// http://clang.llvm.org/extra/clang-tidy/checks/cert/dcl50-cpp.html -class VariadicFunctionDefCheck : public ClangTidyCheck { -public: - VariadicFunctionDefCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context) {} - bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { - return LangOpts.CPlusPlus; - } - void registerMatchers(ast_matchers::MatchFinder *Finder) override; - void check(const ast_matchers::MatchFinder::MatchResult &Result) override; -}; - -} // namespace clang::tidy::cert - -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CERT_VARIADICFUNCTIONDEF_H diff --git a/clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.cpp b/clang-tools-extra/clang-tidy/modernize/AvoidVariadicFunctionsCheck.cpp similarity index 71% rename from clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.cpp rename to clang-tools-extra/clang-tidy/modernize/AvoidVariadicFunctionsCheck.cpp index 5fba32417db42..f8f34e13cfdb2 100644 --- a/clang-tools-extra/clang-tidy/cert/VariadicFunctionDefCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/AvoidVariadicFunctionsCheck.cpp @@ -1,4 +1,4 @@ -//===-- VariadicFunctionDefCheck.cpp - clang-tidy -------------------------===// +//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -6,14 +6,14 @@ // //===----------------------------------------------------------------------===// -#include "VariadicFunctionDefCheck.h" +#include "AvoidVariadicFunctionsCheck.h" #include "clang/ASTMatchers/ASTMatchFinder.h" using namespace clang::ast_matchers; -namespace clang::tidy::cert { +namespace clang::tidy::modernize { -void VariadicFunctionDefCheck::registerMatchers(MatchFinder *Finder) { +void AvoidVariadicFunctionsCheck::registerMatchers(MatchFinder *Finder) { // We only care about function *definitions* that are variadic, and do not // have extern "C" language linkage. Finder->addMatcher( @@ -22,7 +22,8 @@ void VariadicFunctionDefCheck::registerMatchers(MatchFinder *Finder) { this); } -void VariadicFunctionDefCheck::check(const MatchFinder::MatchResult &Result) { +void AvoidVariadicFunctionsCheck::check( + const MatchFinder::MatchResult &Result) { const auto *FD = Result.Nodes.getNodeAs<FunctionDecl>("func"); diag(FD->getLocation(), @@ -30,4 +31,4 @@ void VariadicFunctionDefCheck::check(const MatchFinder::MatchResult &Result) { "parameter pack or currying instead"); } -} // namespace clang::tidy::cert +} // namespace clang::tidy::modernize diff --git a/clang-tools-extra/clang-tidy/modernize/AvoidVariadicFunctionsCheck.h b/clang-tools-extra/clang-tidy/modernize/AvoidVariadicFunctionsCheck.h new file mode 100644 index 0000000000000..d93e9d0c5d678 --- /dev/null +++ b/clang-tools-extra/clang-tidy/modernize/AvoidVariadicFunctionsCheck.h @@ -0,0 +1,33 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_AVOIDVARIADICFUNCTIONSCHECK_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_AVOIDVARIADICFUNCTIONSCHECK_H + +#include "../ClangTidyCheck.h" + +namespace clang::tidy::modernize { + +/// Find all function definitions of C-style variadic functions. +/// +/// For the user-facing documentation see: +/// http://clang.llvm.org/extra/clang-tidy/checks/modernize/avoid-variadic-functions.html +class AvoidVariadicFunctionsCheck : public ClangTidyCheck { +public: + AvoidVariadicFunctionsCheck(StringRef Name, ClangTidyContext *Context) + : ClangTidyCheck(Name, Context) {} + bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { + return LangOpts.CPlusPlus; + } + void registerMatchers(ast_matchers::MatchFinder *Finder) override; + void check(const ast_matchers::MatchFinder::MatchResult &Result) override; +}; + +} // namespace clang::tidy::modernize + +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_AVOIDVARIADICFUNCTIONSCHECK_H diff --git a/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt b/clang-tools-extra/clang-tidy/modernize/CMakeLists.txt index 619a27b2f9bb6..bee6bb2b1d5df 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 + AvoidVariadicFunctionsCheck.cpp ConcatNestedNamespacesCheck.cpp DeprecatedHeadersCheck.cpp DeprecatedIosBaseAliasesCheck.cpp diff --git a/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp b/clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp index fdf38bc4b6308..8811d52ce5448 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 "AvoidVariadicFunctionsCheck.h" #include "ConcatNestedNamespacesCheck.h" #include "DeprecatedHeadersCheck.h" #include "DeprecatedIosBaseAliasesCheck.h" @@ -63,6 +64,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<AvoidVariadicFunctionsCheck>( + "modernize-avoid-variadic-functions"); CheckFactories.registerCheck<ConcatNestedNamespacesCheck>( "modernize-concat-nested-namespaces"); CheckFactories.registerCheck<DeprecatedHeadersCheck>( diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 28620a92e4205..b62697ce96c3e 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -176,6 +176,11 @@ New checks New check aliases ^^^^^^^^^^^^^^^^^ +- Renamed :doc:`cert-dcl50-cpp <clang-tidy/checks/cert/dcl50-cpp>` to + :doc:`modernize-avoid-variadic-functions + <clang-tidy/checks/modernize/avoid-variadic-functions>` + keeping initial check as an alias to the new one. + - Renamed :doc:`cert-err34-c <clang-tidy/checks/cert/err34-c>` to :doc:`bugprone-unchecked-string-to-number-conversion <clang-tidy/checks/bugprone/unchecked-string-to-number-conversion>` diff --git a/clang-tools-extra/docs/clang-tidy/checks/cert/dcl50-cpp.rst b/clang-tools-extra/docs/clang-tidy/checks/cert/dcl50-cpp.rst index 5fc1fbfbb58e7..769e104527430 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/cert/dcl50-cpp.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/cert/dcl50-cpp.rst @@ -1,11 +1,10 @@ .. title:: clang-tidy - cert-dcl50-cpp +.. meta:: + :http-equiv=refresh: 5;URL=../modernize/avoid-variadic-functions.html cert-dcl50-cpp ============== -This check flags all function definitions (but not declarations) of C-style -variadic functions. - -This check corresponds to the CERT C++ Coding Standard rule -`DCL50-CPP. Do not define a C-style variadic function -<https://www.securecoding.cert.org/confluence/display/cplusplus/DCL50-CPP.+Do+not+define+a+C-style+variadic+function>`_. +The cert-dcl50-cpp check is an alias, please see +`modernize-avoid-variadic-functions <../modernize/avoid-variadic-functions.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 89ad491935f7f..c99515ccbac6b 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/list.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst @@ -170,7 +170,6 @@ Clang-Tidy Checks :doc:`bugprone-unused-return-value <bugprone/unused-return-value>`, :doc:`bugprone-use-after-move <bugprone/use-after-move>`, :doc:`bugprone-virtual-near-miss <bugprone/virtual-near-miss>`, "Yes" - :doc:`cert-dcl50-cpp <cert/dcl50-cpp>`, :doc:`cert-dcl58-cpp <cert/dcl58-cpp>`, :doc:`cert-env33-c <cert/env33-c>`, :doc:`cert-err33-c <cert/err33-c>`, @@ -286,6 +285,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-variadic-functions <modernize/avoid-variadic-functions>`, :doc:`modernize-concat-nested-namespaces <modernize/concat-nested-namespaces>`, "Yes" :doc:`modernize-deprecated-headers <modernize/deprecated-headers>`, "Yes" :doc:`modernize-deprecated-ios-base-aliases <modernize/deprecated-ios-base-aliases>`, "Yes" @@ -433,6 +433,7 @@ Check aliases :doc:`cert-dcl03-c <cert/dcl03-c>`, :doc:`misc-static-assert <misc/static-assert>`, "Yes" :doc:`cert-dcl16-c <cert/dcl16-c>`, :doc:`readability-uppercase-literal-suffix <readability/uppercase-literal-suffix>`, "Yes" :doc:`cert-dcl37-c <cert/dcl37-c>`, :doc:`bugprone-reserved-identifier <bugprone/reserved-identifier>`, "Yes" + :doc:`cert-dcl50-cpp <cert/dcl50-cpp>`, :doc:`modernize-avoid-variadic-functions <modernize/avoid-variadic-functions>`, :doc:`cert-dcl51-cpp <cert/dcl51-cpp>`, :doc:`bugprone-reserved-identifier <bugprone/reserved-identifier>`, "Yes" :doc:`cert-dcl54-cpp <cert/dcl54-cpp>`, :doc:`misc-new-delete-overloads <misc/new-delete-overloads>`, :doc:`cert-dcl59-cpp <cert/dcl59-cpp>`, :doc:`google-build-namespaces <google/build-namespaces>`, diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-variadic-functions.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-variadic-functions.rst new file mode 100644 index 0000000000000..c319f7975e039 --- /dev/null +++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-variadic-functions.rst @@ -0,0 +1,17 @@ +.. title:: clang-tidy - modernize-avoid-variadic-functions + +modernize-avoid-variadic-functions +================================== + +Find all function definitions (but not declarations) of C-style variadic +functions. + +Instead of C-style variadic functions, C++ function parameter pack or currying +should be used. + +References +---------- + +This check corresponds to the CERT C++ Coding Standard rule +`DCL50-CPP. Do not define a C-style variadic function +<https://www.securecoding.cert.org/confluence/display/cplusplus/DCL50-CPP.+Do+not+define+a+C-style+variadic+function>`_. \ No newline at end of file diff --git a/clang-tools-extra/test/clang-tidy/checkers/cert/variadic-function-def.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/avoid-variadic-functions.cpp similarity index 85% rename from clang-tools-extra/test/clang-tidy/checkers/cert/variadic-function-def.cpp rename to clang-tools-extra/test/clang-tidy/checkers/modernize/avoid-variadic-functions.cpp index 6b2421b82fa4f..5bdc7c644c822 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/cert/variadic-function-def.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/avoid-variadic-functions.cpp @@ -1,8 +1,8 @@ -// RUN: %check_clang_tidy %s cert-dcl50-cpp %t +// RUN: %check_clang_tidy %s modernize-avoid-variadic-functions %t // Variadic function definitions are diagnosed. void f1(int, ...) {} -// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: do not define a C-style variadic function; consider using a function parameter pack or currying instead [cert-dcl50-cpp] +// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: do not define a C-style variadic function; consider using a function parameter pack or currying instead [modernize-avoid-variadic-functions] // Variadic function *declarations* are not diagnosed. void f2(int, ...); // ok >From ace47de3e58d9ac7e01c6b527e46fb72107a93d7 Mon Sep 17 00:00:00 2001 From: Victor Baranov <bar.victor.2...@gmail.com> Date: Thu, 11 Sep 2025 22:37:09 +0300 Subject: [PATCH 2/2] address pr comments --- clang-tools-extra/docs/clang-tidy/checks/cert/dcl50-cpp.rst | 4 ++++ .../clang-tidy/checks/modernize/avoid-variadic-functions.rst | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/docs/clang-tidy/checks/cert/dcl50-cpp.rst b/clang-tools-extra/docs/clang-tidy/checks/cert/dcl50-cpp.rst index 769e104527430..ac4edd0581a10 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/cert/dcl50-cpp.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/cert/dcl50-cpp.rst @@ -8,3 +8,7 @@ cert-dcl50-cpp The cert-dcl50-cpp check is an alias, please see `modernize-avoid-variadic-functions <../modernize/avoid-variadic-functions.html>`_ for more information. + +This check corresponds to the CERT C++ Coding Standard rule +`DCL50-CPP. Do not define a C-style variadic function +<https://www.securecoding.cert.org/confluence/display/cplusplus/DCL50-CPP.+Do+not+define+a+C-style+variadic+function>`_. diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-variadic-functions.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-variadic-functions.rst index c319f7975e039..1c93c6b325527 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-variadic-functions.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/avoid-variadic-functions.rst @@ -6,8 +6,9 @@ modernize-avoid-variadic-functions Find all function definitions (but not declarations) of C-style variadic functions. -Instead of C-style variadic functions, C++ function parameter pack or currying -should be used. +Instead of C-style variadic functions, C++ function parameter pack should be +used. + References ---------- _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits