Index: clang-tidy/modernize/RedundantVoidArgCheck.h =================================================================== --- clang-tidy/modernize/RedundantVoidArgCheck.h +++ clang-tidy/modernize/RedundantVoidArgCheck.h @@ -42,8 +42,9 @@ void processFunctionDecl(const ast_matchers::MatchFinder::MatchResult &Result, const FunctionDecl *Function); - void processTypedefDecl(const ast_matchers::MatchFinder::MatchResult &Result, - const TypedefDecl *Typedef); + void + processTypedefNameDecl(const ast_matchers::MatchFinder::MatchResult &Result, + const TypedefNameDecl *Typedef); void processFieldDecl(const ast_matchers::MatchFinder::MatchResult &Result, const FieldDecl *Member); Index: clang-tidy/modernize/RedundantVoidArgCheck.cpp =================================================================== --- clang-tidy/modernize/RedundantVoidArgCheck.cpp +++ clang-tidy/modernize/RedundantVoidArgCheck.cpp @@ -50,7 +50,7 @@ unless(isExternC())) .bind(FunctionId), this); - Finder->addMatcher(typedefDecl().bind(TypedefId), this); + Finder->addMatcher(typedefNameDecl().bind(TypedefId), this); auto ParenFunctionType = parenType(innerType(functionType())); auto PointerToFunctionType = pointee(ParenFunctionType); auto FunctionOrMemberPointer = @@ -80,8 +80,9 @@ const BoundNodes &Nodes = Result.Nodes; if (const auto *Function = Nodes.getNodeAs(FunctionId)) { processFunctionDecl(Result, Function); - } else if (const auto *Typedef = Nodes.getNodeAs(TypedefId)) { - processTypedefDecl(Result, Typedef); + } else if (const auto *TypedefName = + Nodes.getNodeAs(TypedefId)) { + processTypedefNameDecl(Result, TypedefName); } else if (const auto *Member = Nodes.getNodeAs(FieldId)) { processFieldDecl(Result, Member); } else if (const auto *Var = Nodes.getNodeAs(VarId)) { @@ -105,8 +106,8 @@ if (Function->isThisDeclarationADefinition()) { const Stmt *Body = Function->getBody(); SourceLocation Start = Function->getLocStart(); - SourceLocation End = Body ? Body->getLocStart().getLocWithOffset(-1) : - Function->getLocEnd(); + SourceLocation End = + Body ? Body->getLocStart().getLocWithOffset(-1) : Function->getLocEnd(); removeVoidArgumentTokens(Result, SourceRange(Start, End), "function definition"); } else { @@ -179,10 +180,13 @@ diag(VoidLoc, Diagnostic) << FixItHint::CreateRemoval(VoidRange); } -void RedundantVoidArgCheck::processTypedefDecl( - const MatchFinder::MatchResult &Result, const TypedefDecl *Typedef) { - if (protoTypeHasNoParms(Typedef->getUnderlyingType())) { - removeVoidArgumentTokens(Result, Typedef->getSourceRange(), "typedef"); +void RedundantVoidArgCheck::processTypedefNameDecl( + const MatchFinder::MatchResult &Result, + const TypedefNameDecl *TypedefName) { + if (protoTypeHasNoParms(TypedefName->getUnderlyingType())) { + removeVoidArgumentTokens(Result, TypedefName->getSourceRange(), + isa(TypedefName) ? "typedef" + : "type alias"); } } Index: test/clang-tidy/modernize-redundant-void-arg.cpp =================================================================== --- test/clang-tidy/modernize-redundant-void-arg.cpp +++ test/clang-tidy/modernize-redundant-void-arg.cpp @@ -39,6 +39,12 @@ // CHECK-MESSAGES: :[[@LINE-2]]:44: warning: {{.*}} in typedef // CHECK-FIXES: {{^}}typedef int (*returns_fn_void_int_t())();{{$}} +// Should work for type aliases as well as typedef. +using returns_fn_void_int_t2 = int (*(void))(void); +// CHECK-MESSAGES: :[[@LINE-1]]:39: warning: {{.*}} in type alias +// CHECK-MESSAGES: :[[@LINE-2]]:46: warning: {{.*}} in type alias +// CHECK-FIXES: {{^}}using returns_fn_void_int_t2 = int (*())();{{$}} + int (*returns_fn_void_int(void))(void) { // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: {{.*}} in function definition // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: {{.*}} in function definition