llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tidy Author: Victor Chernyakin (localspook) <details> <summary>Changes</summary> As suggested in [this comment](https://github.com/llvm/llvm-project/pull/173340#discussion_r2810951335)! --- Full diff: https://github.com/llvm/llvm-project/pull/182422.diff 5 Files Affected: - (modified) clang-tools-extra/clang-tidy/modernize/RedundantVoidArgCheck.cpp (+9-4) - (modified) clang-tools-extra/clang-tidy/modernize/RedundantVoidArgCheck.h (+1-1) - (modified) clang-tools-extra/docs/ReleaseNotes.rst (+3) - (modified) clang-tools-extra/docs/clang-tidy/checks/modernize/redundant-void-arg.rst (+2-1) - (modified) clang-tools-extra/test/clang-tidy/checkers/modernize/redundant-void-arg.c (+37-1) ``````````diff diff --git a/clang-tools-extra/clang-tidy/modernize/RedundantVoidArgCheck.cpp b/clang-tools-extra/clang-tidy/modernize/RedundantVoidArgCheck.cpp index 7be32987acb7b..535f0e156caa4 100644 --- a/clang-tools-extra/clang-tidy/modernize/RedundantVoidArgCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/RedundantVoidArgCheck.cpp @@ -15,10 +15,15 @@ using namespace clang::ast_matchers; namespace clang::tidy::modernize { void RedundantVoidArgCheck::registerMatchers(MatchFinder *Finder) { - Finder->addMatcher( - functionTypeLoc(unless(hasParent(functionDecl(isExternC())))).bind("fn"), - this); - Finder->addMatcher(lambdaExpr().bind("fn"), this); + if (getLangOpts().CPlusPlus) { + Finder->addMatcher( + functionTypeLoc(unless(hasParent(functionDecl(isExternC())))) + .bind("fn"), + this); + Finder->addMatcher(lambdaExpr().bind("fn"), this); + } else { + Finder->addMatcher(functionTypeLoc().bind("fn"), this); + } } void RedundantVoidArgCheck::check(const MatchFinder::MatchResult &Result) { diff --git a/clang-tools-extra/clang-tidy/modernize/RedundantVoidArgCheck.h b/clang-tools-extra/clang-tidy/modernize/RedundantVoidArgCheck.h index d5f9356fab5a9..b92fce777f9af 100644 --- a/clang-tools-extra/clang-tidy/modernize/RedundantVoidArgCheck.h +++ b/clang-tools-extra/clang-tidy/modernize/RedundantVoidArgCheck.h @@ -29,7 +29,7 @@ class RedundantVoidArgCheck : public ClangTidyCheck { : ClangTidyCheck(Name, Context) {} bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { - return LangOpts.CPlusPlus; + return LangOpts.CPlusPlus || LangOpts.C23; } std::optional<TraversalKind> getCheckTraversalKind() const override { return TK_IgnoreUnlessSpelledInSource; diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 68bab88146241..22992c5a1d5d8 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -209,6 +209,9 @@ Changes in existing checks <clang-tidy/checks/modernize/pass-by-value>` check by adding `IgnoreMacros` option to suppress warnings in macros. +- Improved :doc:`modernize-redundant-void-arg + <clang-tidy/checks/modernize/redundant-void-arg>` check to work in C23. + - Improved :doc:`modernize-use-std-format <clang-tidy/checks/modernize/use-std-format>` check by fixing a crash when an argument is part of a macro expansion. diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize/redundant-void-arg.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize/redundant-void-arg.rst index d1a03e3fbb61c..209d9ba7fd123 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/modernize/redundant-void-arg.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/modernize/redundant-void-arg.rst @@ -3,7 +3,8 @@ modernize-redundant-void-arg ============================ -Find and remove redundant ``void`` argument lists. +Finds and removes redundant ``void`` argument lists. +Works in C++ and in C23 and up. Examples: =================================== =========================== diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/redundant-void-arg.c b/clang-tools-extra/test/clang-tidy/checkers/modernize/redundant-void-arg.c index bbbf73f9c676a..8eb874a33c101 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/modernize/redundant-void-arg.c +++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/redundant-void-arg.c @@ -1,4 +1,7 @@ -// RUN: clang-tidy -checks=-*,modernize-redundant-void-arg %s -- -Wno-strict-prototypes -x c | count 0 +// RUN: clang-tidy %s -checks=-*,modernize-redundant-void-arg -- -std=c99 -Wno-strict-prototypes | count 0 +// RUN: clang-tidy %s -checks=-*,modernize-redundant-void-arg -- -std=c11 -Wno-strict-prototypes | count 0 +// RUN: clang-tidy %s -checks=-*,modernize-redundant-void-arg -- -std=c17 -Wno-strict-prototypes | count 0 +// RUN: %check_clang_tidy -std=c23-or-later -check-suffixes=C23 %s modernize-redundant-void-arg %t #define NULL 0 @@ -11,6 +14,8 @@ int foo2() { int j = 1; int foo(void) { +// CHECK-MESSAGES-C23: :[[@LINE-1]]:9: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: int foo() { return 0; } @@ -21,24 +26,47 @@ typedef void my_void; // A function taking void and returning a pointer to function taking void // and returning int. int (*returns_fn_void_int(void))(void); +// CHECK-MESSAGES-C23: :[[@LINE-1]]:27: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-MESSAGES-C23: :[[@LINE-2]]:34: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: int (*returns_fn_void_int())(); typedef int (*returns_fn_void_int_t(void))(void); +// CHECK-MESSAGES-C23: :[[@LINE-1]]:37: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-MESSAGES-C23: :[[@LINE-2]]:44: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: typedef int (*returns_fn_void_int_t())(); int (*returns_fn_void_int(void))(void) { +// CHECK-MESSAGES-C23: :[[@LINE-1]]:27: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-MESSAGES-C23: :[[@LINE-2]]:34: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: int (*returns_fn_void_int())() { return NULL; } // A function taking void and returning a pointer to a function taking void // and returning a pointer to a function taking void and returning void. void (*(*returns_fn_returns_fn_void_void(void))(void))(void); +// CHECK-MESSAGES-C23: :[[@LINE-1]]:42: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-MESSAGES-C23: :[[@LINE-2]]:49: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-MESSAGES-C23: :[[@LINE-3]]:56: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: void (*(*returns_fn_returns_fn_void_void())())(); typedef void (*(*returns_fn_returns_fn_void_void_t(void))(void))(void); +// CHECK-MESSAGES-C23: :[[@LINE-1]]:52: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-MESSAGES-C23: :[[@LINE-2]]:59: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-MESSAGES-C23: :[[@LINE-3]]:66: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: typedef void (*(*returns_fn_returns_fn_void_void_t())())(); void (*(*returns_fn_returns_fn_void_void(void))(void))(void) { +// CHECK-MESSAGES-C23: :[[@LINE-1]]:42: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-MESSAGES-C23: :[[@LINE-2]]:49: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-MESSAGES-C23: :[[@LINE-3]]:56: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: void (*(*returns_fn_returns_fn_void_void())())() { return NULL; } void bar(void) { +// CHECK-MESSAGES-C23: :[[@LINE-1]]:10: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: void bar() { int i; int *pi = NULL; void *pv = (void *) pi; @@ -49,10 +77,18 @@ void bar(void) { } void (*f1)(void); +// CHECK-MESSAGES-C23: :[[@LINE-1]]:12: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: void (*f1)(); void (*f2)(void) = NULL; +// CHECK-MESSAGES-C23: :[[@LINE-1]]:12: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: void (*f2)() = NULL; void (*f3)(void) = bar; +// CHECK-MESSAGES-C23: :[[@LINE-1]]:12: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: void (*f3)() = bar; void (*fa)(); void (*fb)() = NULL; void (*fc)() = bar; typedef void (function_ptr)(void); +// CHECK-MESSAGES-C23: :[[@LINE-1]]:29: warning: redundant void argument list [modernize-redundant-void-arg] +// CHECK-FIXES-C23: typedef void (function_ptr)(); `````````` </details> https://github.com/llvm/llvm-project/pull/182422 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
