std::unique_ptr<CompilerInvocation>
buildCompilerInvocation(const ParseInputs &Inputs, clang::DiagnosticConsumer &D,
std::vector<std::string> *CC1Args) {
- if (Inputs.CompileCommand.CommandLine.empty())
+ llvm::ArrayRef<std::string> Argv = Inputs.CompileCommand.CommandLine;
+ if (Argv.empty())
return nullptr;
std::vector<const char *> ArgStrs;
- for (const auto &S : Inputs.CompileCommand.CommandLine)
+ ArgStrs.reserve(Argv.size() + 1);
+ // In asserts builds, CompilerInvocation redundantly reads/parses cc1 args as
+ // a sanity test. This is not useful to clangd, and costs 10% of test time.
+ // To avoid mismatches between assert/production builds, disable it always.
+ ArgStrs = {Argv.front().c_str(), "-Xclang", "-no-round-trip-args"};
+ for (const auto &S : Argv.drop_front())
ArgStrs.push_back(S.c_str());
CreateInvocationOptions CIOpts;