Index: clang-tidy/modernize/RedundantVoidArgCheck.cpp =================================================================== --- clang-tidy/modernize/RedundantVoidArgCheck.cpp +++ clang-tidy/modernize/RedundantVoidArgCheck.cpp @@ -128,6 +128,9 @@ void RedundantVoidArgCheck::removeVoidArgumentTokens( const ast_matchers::MatchFinder::MatchResult &Result, SourceRange Range, StringRef GrammarLocation) { + if (Range.getBegin().isMacroID() || Range.getEnd().isMacroID()) + return; + std::string DeclText = Lexer::getSourceText(CharSourceRange::getTokenRange(Range), *Result.SourceManager, 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 @@ -417,3 +417,13 @@ // CHECK-MESSAGES: [[@LINE-2]]:45: warning: {{.*}} in lambda expression // CHECK-FIXES: {{^ }}auto void_returner = []() -> void (*)() { return f1; };{{$}} } + +#define F(A, B) \ + struct F_##A##_##B { \ + F_##A##_##B(void); \ + }; \ + F_##A##_##B::F_##A##_##B(void) + +F(Foo, Bar) { + +}