Author: Nathan Ridge Date: 2022-05-24T13:10:41-04:00 New Revision: 175833ed6f62b697ce6248930da54e4ddb7f4c00
URL: https://github.com/llvm/llvm-project/commit/175833ed6f62b697ce6248930da54e4ddb7f4c00 DIFF: https://github.com/llvm/llvm-project/commit/175833ed6f62b697ce6248930da54e4ddb7f4c00.diff LOG: [clangd] Handle '--' in QueryDriverDatabase Fixes https://github.com/clangd/clangd/issues/1100, a regression from D116721. Differential Revision: https://reviews.llvm.org/D126274 Added: Modified: clang-tools-extra/clangd/QueryDriverDatabase.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/QueryDriverDatabase.cpp b/clang-tools-extra/clangd/QueryDriverDatabase.cpp index 477087323c7d3..e96912c6290c7 100644 --- a/clang-tools-extra/clangd/QueryDriverDatabase.cpp +++ b/clang-tools-extra/clangd/QueryDriverDatabase.cpp @@ -50,6 +50,7 @@ #include "llvm/Support/Regex.h" #include "llvm/Support/ScopedPrinter.h" #include <algorithm> +#include <iterator> #include <map> #include <string> #include <vector> @@ -238,10 +239,17 @@ extractSystemIncludesAndTarget(llvm::SmallString<128> Driver, tooling::CompileCommand & addSystemIncludes(tooling::CompileCommand &Cmd, llvm::ArrayRef<std::string> SystemIncludes) { + std::vector<std::string> ToAppend; for (llvm::StringRef Include : SystemIncludes) { // FIXME(kadircet): This doesn't work when we have "--driver-mode=cl" - Cmd.CommandLine.push_back("-isystem"); - Cmd.CommandLine.push_back(Include.str()); + ToAppend.push_back("-isystem"); + ToAppend.push_back(Include.str()); + } + if (!ToAppend.empty()) { + // Just append when `--` isn't present. + auto InsertAt = llvm::find(Cmd.CommandLine, "--"); + Cmd.CommandLine.insert(InsertAt, std::make_move_iterator(ToAppend.begin()), + std::make_move_iterator(ToAppend.end())); } return Cmd; } @@ -254,7 +262,9 @@ tooling::CompileCommand &setTarget(tooling::CompileCommand &Cmd, if (Arg == "-target" || Arg.startswith("--target=")) return Cmd; } - Cmd.CommandLine.push_back("--target=" + Target); + // Just append when `--` isn't present. + auto InsertAt = llvm::find(Cmd.CommandLine, "--"); + Cmd.CommandLine.insert(InsertAt, "--target=" + Target); } return Cmd; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits