16#include "llvm/ADT/STLExtras.h"
17#include "llvm/ADT/StringRef.h"
25 for (
const auto &Arg : Args) {
26 StringRef ArgRef = Arg;
27 if (ArgRef.consume_front(
"--driver-mode=")) {
38 bool HasSyntaxOnly =
false;
39 constexpr llvm::StringRef OutputCommands[] = {
44 for (
size_t i = 0, e = Args.size(); i < e; ++i) {
45 StringRef Arg = Args[i];
47 if (llvm::any_of(OutputCommands, [&Arg](llvm::StringRef OutputCommand) {
48 return Arg.startswith(OutputCommand);
52 if (!Arg.startswith(
"-fcolor-diagnostics") &&
53 !Arg.startswith(
"-fdiagnostics-color"))
54 AdjustedArgs.push_back(Args[i]);
58 else if (!AdjustedArgs.empty() && AdjustedArgs.back() ==
"-Xclang")
59 AdjustedArgs.pop_back();
61 if (Arg ==
"-fsyntax-only")
74 for (
size_t i = 0, e = Args.size(); i < e; ++i) {
75 StringRef Arg = Args[i];
76 if (!Arg.startswith(
"-o"))
77 AdjustedArgs.push_back(Args[i]);
94 for (
size_t i = 0, e = Args.size(); i < e; ++i) {
95 StringRef Arg = Args[i];
98 if (!UsingClDriver && (Arg ==
"-MF" || Arg ==
"-MT" || Arg ==
"-MQ")) {
105 if (!UsingClDriver && Arg.startswith(
"-M"))
109 if (Arg.startswith(
"/showIncludes") || Arg.startswith(
"-showIncludes"))
112 AdjustedArgs.push_back(Args[i]);
123 CommandLineArguments::iterator I;
125 I = llvm::find(Return,
"--");
131 Return.insert(I, Extra.begin(), Extra.end());
155 for (
size_t I = 0, E = Args.size(); I != E; I++) {
160 if (I + 4 < E && Args[I] ==
"-Xclang" &&
161 (Args[I + 1] ==
"-load" || Args[I + 1] ==
"-plugin" ||
162 llvm::StringRef(Args[I + 1]).startswith(
"-plugin-arg-") ||
163 Args[I + 1] ==
"-add-plugin") &&
164 Args[I + 2] ==
"-Xclang") {
168 AdjustedArgs.push_back(Args[I]);
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.