Index: clang-tidy/ClangTidy.cpp =================================================================== --- clang-tidy/ClangTidy.cpp +++ clang-tidy/ClangTidy.cpp @@ -417,6 +417,8 @@ std::vector *Errors, ProfileData *Profile) { ClangTool Tool(Compilations, InputFiles); clang::tidy::ClangTidyContext Context(std::move(OptionsProvider)); + + // Add extra arguments passed by the clang-tidy command-line. ArgumentsAdjuster PerFileExtraArgumentsInserter = [&Context]( const CommandLineArguments &Args, StringRef Filename) { ClangTidyOptions Opts = Context.getOptionsForFile(Filename); @@ -429,7 +431,28 @@ Opts.ExtraArgs->end()); return AdjustedArgs; }; + + // Remove plugins arguments. + ArgumentsAdjuster PluginArgumentsRemover = [&Context]( + const CommandLineArguments &Args, StringRef Filename) { + CommandLineArguments AdjustedArgs; + for (size_t i = 0, e = Args.size(); i != e; ++i) { + if (i + 4 < Args.size() && + Args[i + 0] == "-Xclang" && + (Args[i + 1] == "-load" || + Args[i + 1] == "-add-plugin" || + StringRef(Args[i + 1]).startswith("-plugin-arg-")) && + Args[i + 2] == "-Xclang") { + // skip all arguments. + i += 3; + } + else AdjustedArgs.push_back(Args[i + 0]); + } + return AdjustedArgs; + }; + Tool.appendArgumentsAdjuster(PerFileExtraArgumentsInserter); + Tool.appendArgumentsAdjuster(PluginArgumentsRemover); if (Profile) Context.setCheckProfileData(Profile);