diff options
author | Kadir Cetinkaya <kadircet@google.com> | 2019-11-13 13:44:40 +0100 |
---|---|---|
committer | Kadir Cetinkaya <kadircet@google.com> | 2019-11-13 15:03:30 +0100 |
commit | 16bdcc809c72c639a2888b6b859dca88453e3c28 (patch) | |
tree | 40e196204baf74a7502833432105fce17f3b7f69 /clang/lib/Tooling/ArgumentsAdjusters.cpp | |
parent | 33e882d5ada0b42323be3277816b0817b8e6baa2 (diff) | |
download | bcm5719-llvm-16bdcc809c72c639a2888b6b859dca88453e3c28.tar.gz bcm5719-llvm-16bdcc809c72c639a2888b6b859dca88453e3c28.zip |
[clang][Tooling] Filter flags that generate output in SyntaxOnlyAdjuster
Summary:
Flags that generate output could result in failures when creating
syntax only actions. This patch introduces initial logic for filtering out
those. The first such flag is "save-temps", which saves intermediate
files(bitcode, assembly, etc.) into a specified directory.
Fixes https://github.com/clangd/clangd/issues/191
Reviewers: hokein
Subscribers: ilya-biryukov, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D70173
Diffstat (limited to 'clang/lib/Tooling/ArgumentsAdjusters.cpp')
-rw-r--r-- | clang/lib/Tooling/ArgumentsAdjusters.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/clang/lib/Tooling/ArgumentsAdjusters.cpp b/clang/lib/Tooling/ArgumentsAdjusters.cpp index f56d08c47b9..a609e4ed246 100644 --- a/clang/lib/Tooling/ArgumentsAdjusters.cpp +++ b/clang/lib/Tooling/ArgumentsAdjusters.cpp @@ -13,20 +13,32 @@ #include "clang/Tooling/ArgumentsAdjusters.h" #include "clang/Basic/LLVM.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringRef.h" #include <cstddef> +#include <vector> namespace clang { namespace tooling { -/// Add -fsyntax-only option to the command line arguments. +/// Add -fsyntax-only option and drop options that triggers output generation. ArgumentsAdjuster getClangSyntaxOnlyAdjuster() { return [](const CommandLineArguments &Args, StringRef /*unused*/) { CommandLineArguments AdjustedArgs; bool HasSyntaxOnly = false; + const std::vector<llvm::StringRef> OutputCommands = { + // FIXME: Add other options that generate output. + "-save-temps", + "--save-temps", + }; for (size_t i = 0, e = Args.size(); i < e; ++i) { StringRef Arg = Args[i]; - // FIXME: Remove options that generate output. + // Skip output commands. + if (llvm::any_of(OutputCommands, [&Arg](llvm::StringRef OutputCommand) { + return Arg.startswith(OutputCommand); + })) + continue; + if (!Arg.startswith("-fcolor-diagnostics") && !Arg.startswith("-fdiagnostics-color")) AdjustedArgs.push_back(Args[i]); |