1 //===--- Driver.cpp - Clang GCC Compatible Driver -------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "clang/Driver/Driver.h"
11 #include "InputInfo.h"
12 #include "ToolChains.h"
13 #include "clang/Basic/Version.h"
14 #include "clang/Basic/VirtualFileSystem.h"
15 #include "clang/Config/config.h"
16 #include "clang/Driver/Action.h"
17 #include "clang/Driver/Compilation.h"
18 #include "clang/Driver/DriverDiagnostic.h"
19 #include "clang/Driver/Job.h"
20 #include "clang/Driver/Options.h"
21 #include "clang/Driver/SanitizerArgs.h"
22 #include "clang/Driver/Tool.h"
23 #include "clang/Driver/ToolChain.h"
24 #include "llvm/ADT/ArrayRef.h"
25 #include "llvm/ADT/STLExtras.h"
26 #include "llvm/ADT/StringExtras.h"
27 #include "llvm/ADT/StringSet.h"
28 #include "llvm/ADT/StringSwitch.h"
29 #include "llvm/Option/Arg.h"
30 #include "llvm/Option/ArgList.h"
31 #include "llvm/Option/OptSpecifier.h"
32 #include "llvm/Option/OptTable.h"
33 #include "llvm/Option/Option.h"
34 #include "llvm/Support/Debug.h"
35 #include "llvm/Support/ErrorHandling.h"
36 #include "llvm/Support/FileSystem.h"
37 #include "llvm/Support/Path.h"
38 #include "llvm/Support/PrettyStackTrace.h"
39 #include "llvm/Support/Process.h"
40 #include "llvm/Support/Program.h"
41 #include "llvm/Support/raw_ostream.h"
42 #include <map>
43 #include <memory>
44 #include <utility>
45 
46 using namespace clang::driver;
47 using namespace clang;
48 using namespace llvm::opt;
49 
50 Driver::Driver(StringRef ClangExecutable, StringRef DefaultTargetTriple,
51                DiagnosticsEngine &Diags,
52                IntrusiveRefCntPtr<vfs::FileSystem> VFS)
53     : Opts(createDriverOptTable()), Diags(Diags), VFS(std::move(VFS)),
54       Mode(GCCMode), SaveTemps(SaveTempsNone), BitcodeEmbed(EmbedNone),
55       LTOMode(LTOK_None), ClangExecutable(ClangExecutable),
56       SysRoot(DEFAULT_SYSROOT), UseStdLib(true),
57       DefaultTargetTriple(DefaultTargetTriple),
58       DriverTitle("clang LLVM compiler"), CCPrintOptionsFilename(nullptr),
59       CCPrintHeadersFilename(nullptr), CCLogDiagnosticsFilename(nullptr),
60       CCCPrintBindings(false), CCPrintHeaders(false), CCLogDiagnostics(false),
61       CCGenDiagnostics(false), CCCGenericGCCName(""), CheckInputsExist(true),
62       CCCUsePCH(true), SuppressMissingInputWarning(false) {
63 
64   // Provide a sane fallback if no VFS is specified.
65   if (!this->VFS)
66     this->VFS = vfs::getRealFileSystem();
67 
68   Name = llvm::sys::path::filename(ClangExecutable);
69   Dir = llvm::sys::path::parent_path(ClangExecutable);
70   InstalledDir = Dir; // Provide a sensible default installed dir.
71 
72   // Compute the path to the resource directory.
73   StringRef ClangResourceDir(CLANG_RESOURCE_DIR);
74   SmallString<128> P(Dir);
75   if (ClangResourceDir != "") {
76     llvm::sys::path::append(P, ClangResourceDir);
77   } else {
78     StringRef ClangLibdirSuffix(CLANG_LIBDIR_SUFFIX);
79     llvm::sys::path::append(P, "..", Twine("lib") + ClangLibdirSuffix, "clang",
80                             CLANG_VERSION_STRING);
81   }
82   ResourceDir = P.str();
83 }
84 
85 Driver::~Driver() {
86   delete Opts;
87 
88   llvm::DeleteContainerSeconds(ToolChains);
89 }
90 
91 void Driver::ParseDriverMode(ArrayRef<const char *> Args) {
92   const std::string OptName =
93       getOpts().getOption(options::OPT_driver_mode).getPrefixedName();
94 
95   for (const char *ArgPtr : Args) {
96     // Ingore nullptrs, they are response file's EOL markers
97     if (ArgPtr == nullptr)
98       continue;
99     const StringRef Arg = ArgPtr;
100     if (!Arg.startswith(OptName))
101       continue;
102 
103     const StringRef Value = Arg.drop_front(OptName.size());
104     const unsigned M = llvm::StringSwitch<unsigned>(Value)
105                            .Case("gcc", GCCMode)
106                            .Case("g++", GXXMode)
107                            .Case("cpp", CPPMode)
108                            .Case("cl", CLMode)
109                            .Default(~0U);
110 
111     if (M != ~0U)
112       Mode = static_cast<DriverMode>(M);
113     else
114       Diag(diag::err_drv_unsupported_option_argument) << OptName << Value;
115   }
116 }
117 
118 InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings) {
119   llvm::PrettyStackTraceString CrashInfo("Command line argument parsing");
120 
121   unsigned IncludedFlagsBitmask;
122   unsigned ExcludedFlagsBitmask;
123   std::tie(IncludedFlagsBitmask, ExcludedFlagsBitmask) =
124       getIncludeExcludeOptionFlagMasks();
125 
126   unsigned MissingArgIndex, MissingArgCount;
127   InputArgList Args =
128       getOpts().ParseArgs(ArgStrings, MissingArgIndex, MissingArgCount,
129                           IncludedFlagsBitmask, ExcludedFlagsBitmask);
130 
131   // Check for missing argument error.
132   if (MissingArgCount)
133     Diag(clang::diag::err_drv_missing_argument)
134         << Args.getArgString(MissingArgIndex) << MissingArgCount;
135 
136   // Check for unsupported options.
137   for (const Arg *A : Args) {
138     if (A->getOption().hasFlag(options::Unsupported)) {
139       Diag(clang::diag::err_drv_unsupported_opt) << A->getAsString(Args);
140       continue;
141     }
142 
143     // Warn about -mcpu= without an argument.
144     if (A->getOption().matches(options::OPT_mcpu_EQ) && A->containsValue("")) {
145       Diag(clang::diag::warn_drv_empty_joined_argument) << A->getAsString(Args);
146     }
147   }
148 
149   for (const Arg *A : Args.filtered(options::OPT_UNKNOWN))
150     Diags.Report(IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl :
151                               diag::err_drv_unknown_argument)
152       << A->getAsString(Args);
153 
154   return Args;
155 }
156 
157 // Determine which compilation mode we are in. We look for options which
158 // affect the phase, starting with the earliest phases, and record which
159 // option we used to determine the final phase.
160 phases::ID Driver::getFinalPhase(const DerivedArgList &DAL,
161                                  Arg **FinalPhaseArg) const {
162   Arg *PhaseArg = nullptr;
163   phases::ID FinalPhase;
164 
165   // -{E,EP,P,M,MM} only run the preprocessor.
166   if (CCCIsCPP() || (PhaseArg = DAL.getLastArg(options::OPT_E)) ||
167       (PhaseArg = DAL.getLastArg(options::OPT__SLASH_EP)) ||
168       (PhaseArg = DAL.getLastArg(options::OPT_M, options::OPT_MM)) ||
169       (PhaseArg = DAL.getLastArg(options::OPT__SLASH_P))) {
170     FinalPhase = phases::Preprocess;
171 
172     // -{fsyntax-only,-analyze,emit-ast} only run up to the compiler.
173   } else if ((PhaseArg = DAL.getLastArg(options::OPT_fsyntax_only)) ||
174              (PhaseArg = DAL.getLastArg(options::OPT_module_file_info)) ||
175              (PhaseArg = DAL.getLastArg(options::OPT_verify_pch)) ||
176              (PhaseArg = DAL.getLastArg(options::OPT_rewrite_objc)) ||
177              (PhaseArg = DAL.getLastArg(options::OPT_rewrite_legacy_objc)) ||
178              (PhaseArg = DAL.getLastArg(options::OPT__migrate)) ||
179              (PhaseArg = DAL.getLastArg(options::OPT__analyze,
180                                         options::OPT__analyze_auto)) ||
181              (PhaseArg = DAL.getLastArg(options::OPT_emit_ast))) {
182     FinalPhase = phases::Compile;
183 
184     // -S only runs up to the backend.
185   } else if ((PhaseArg = DAL.getLastArg(options::OPT_S))) {
186     FinalPhase = phases::Backend;
187 
188     // -c compilation only runs up to the assembler.
189   } else if ((PhaseArg = DAL.getLastArg(options::OPT_c))) {
190     FinalPhase = phases::Assemble;
191 
192     // Otherwise do everything.
193   } else
194     FinalPhase = phases::Link;
195 
196   if (FinalPhaseArg)
197     *FinalPhaseArg = PhaseArg;
198 
199   return FinalPhase;
200 }
201 
202 static Arg *MakeInputArg(DerivedArgList &Args, OptTable *Opts,
203                          StringRef Value) {
204   Arg *A = new Arg(Opts->getOption(options::OPT_INPUT), Value,
205                    Args.getBaseArgs().MakeIndex(Value), Value.data());
206   Args.AddSynthesizedArg(A);
207   A->claim();
208   return A;
209 }
210 
211 DerivedArgList *Driver::TranslateInputArgs(const InputArgList &Args) const {
212   DerivedArgList *DAL = new DerivedArgList(Args);
213 
214   bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
215   bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs);
216   for (Arg *A : Args) {
217     // Unfortunately, we have to parse some forwarding options (-Xassembler,
218     // -Xlinker, -Xpreprocessor) because we either integrate their functionality
219     // (assembler and preprocessor), or bypass a previous driver ('collect2').
220 
221     // Rewrite linker options, to replace --no-demangle with a custom internal
222     // option.
223     if ((A->getOption().matches(options::OPT_Wl_COMMA) ||
224          A->getOption().matches(options::OPT_Xlinker)) &&
225         A->containsValue("--no-demangle")) {
226       // Add the rewritten no-demangle argument.
227       DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_Xlinker__no_demangle));
228 
229       // Add the remaining values as Xlinker arguments.
230       for (StringRef Val : A->getValues())
231         if (Val != "--no-demangle")
232           DAL->AddSeparateArg(A, Opts->getOption(options::OPT_Xlinker), Val);
233 
234       continue;
235     }
236 
237     // Rewrite preprocessor options, to replace -Wp,-MD,FOO which is used by
238     // some build systems. We don't try to be complete here because we don't
239     // care to encourage this usage model.
240     if (A->getOption().matches(options::OPT_Wp_COMMA) &&
241         (A->getValue(0) == StringRef("-MD") ||
242          A->getValue(0) == StringRef("-MMD"))) {
243       // Rewrite to -MD/-MMD along with -MF.
244       if (A->getValue(0) == StringRef("-MD"))
245         DAL->AddFlagArg(A, Opts->getOption(options::OPT_MD));
246       else
247         DAL->AddFlagArg(A, Opts->getOption(options::OPT_MMD));
248       if (A->getNumValues() == 2)
249         DAL->AddSeparateArg(A, Opts->getOption(options::OPT_MF),
250                             A->getValue(1));
251       continue;
252     }
253 
254     // Rewrite reserved library names.
255     if (A->getOption().matches(options::OPT_l)) {
256       StringRef Value = A->getValue();
257 
258       // Rewrite unless -nostdlib is present.
259       if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") {
260         DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx));
261         continue;
262       }
263 
264       // Rewrite unconditionally.
265       if (Value == "cc_kext") {
266         DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_cckext));
267         continue;
268       }
269     }
270 
271     // Pick up inputs via the -- option.
272     if (A->getOption().matches(options::OPT__DASH_DASH)) {
273       A->claim();
274       for (StringRef Val : A->getValues())
275         DAL->append(MakeInputArg(*DAL, Opts, Val));
276       continue;
277     }
278 
279     DAL->append(A);
280   }
281 
282   // Enforce -static if -miamcu is present.
283   if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false))
284     DAL->AddFlagArg(0, Opts->getOption(options::OPT_static));
285 
286 // Add a default value of -mlinker-version=, if one was given and the user
287 // didn't specify one.
288 #if defined(HOST_LINK_VERSION)
289   if (!Args.hasArg(options::OPT_mlinker_version_EQ) &&
290       strlen(HOST_LINK_VERSION) > 0) {
291     DAL->AddJoinedArg(0, Opts->getOption(options::OPT_mlinker_version_EQ),
292                       HOST_LINK_VERSION);
293     DAL->getLastArg(options::OPT_mlinker_version_EQ)->claim();
294   }
295 #endif
296 
297   return DAL;
298 }
299 
300 /// \brief Compute target triple from args.
301 ///
302 /// This routine provides the logic to compute a target triple from various
303 /// args passed to the driver and the default triple string.
304 static llvm::Triple computeTargetTriple(const Driver &D,
305                                         StringRef DefaultTargetTriple,
306                                         const ArgList &Args,
307                                         StringRef DarwinArchName = "") {
308   // FIXME: Already done in Compilation *Driver::BuildCompilation
309   if (const Arg *A = Args.getLastArg(options::OPT_target))
310     DefaultTargetTriple = A->getValue();
311 
312   llvm::Triple Target(llvm::Triple::normalize(DefaultTargetTriple));
313 
314   // Handle Apple-specific options available here.
315   if (Target.isOSBinFormatMachO()) {
316     // If an explict Darwin arch name is given, that trumps all.
317     if (!DarwinArchName.empty()) {
318       tools::darwin::setTripleTypeForMachOArchName(Target, DarwinArchName);
319       return Target;
320     }
321 
322     // Handle the Darwin '-arch' flag.
323     if (Arg *A = Args.getLastArg(options::OPT_arch)) {
324       StringRef ArchName = A->getValue();
325       tools::darwin::setTripleTypeForMachOArchName(Target, ArchName);
326     }
327   }
328 
329   // Handle pseudo-target flags '-mlittle-endian'/'-EL' and
330   // '-mbig-endian'/'-EB'.
331   if (Arg *A = Args.getLastArg(options::OPT_mlittle_endian,
332                                options::OPT_mbig_endian)) {
333     if (A->getOption().matches(options::OPT_mlittle_endian)) {
334       llvm::Triple LE = Target.getLittleEndianArchVariant();
335       if (LE.getArch() != llvm::Triple::UnknownArch)
336         Target = std::move(LE);
337     } else {
338       llvm::Triple BE = Target.getBigEndianArchVariant();
339       if (BE.getArch() != llvm::Triple::UnknownArch)
340         Target = std::move(BE);
341     }
342   }
343 
344   // Skip further flag support on OSes which don't support '-m32' or '-m64'.
345   if (Target.getArch() == llvm::Triple::tce ||
346       Target.getOS() == llvm::Triple::Minix)
347     return Target;
348 
349   // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'.
350   Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
351                            options::OPT_m32, options::OPT_m16);
352   if (A) {
353     llvm::Triple::ArchType AT = llvm::Triple::UnknownArch;
354 
355     if (A->getOption().matches(options::OPT_m64)) {
356       AT = Target.get64BitArchVariant().getArch();
357       if (Target.getEnvironment() == llvm::Triple::GNUX32)
358         Target.setEnvironment(llvm::Triple::GNU);
359     } else if (A->getOption().matches(options::OPT_mx32) &&
360                Target.get64BitArchVariant().getArch() == llvm::Triple::x86_64) {
361       AT = llvm::Triple::x86_64;
362       Target.setEnvironment(llvm::Triple::GNUX32);
363     } else if (A->getOption().matches(options::OPT_m32)) {
364       AT = Target.get32BitArchVariant().getArch();
365       if (Target.getEnvironment() == llvm::Triple::GNUX32)
366         Target.setEnvironment(llvm::Triple::GNU);
367     } else if (A->getOption().matches(options::OPT_m16) &&
368                Target.get32BitArchVariant().getArch() == llvm::Triple::x86) {
369       AT = llvm::Triple::x86;
370       Target.setEnvironment(llvm::Triple::CODE16);
371     }
372 
373     if (AT != llvm::Triple::UnknownArch && AT != Target.getArch())
374       Target.setArch(AT);
375   }
376 
377   // Handle -miamcu flag.
378   if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) {
379     if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86)
380       D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu"
381                                                        << Target.str();
382 
383     if (A && !A->getOption().matches(options::OPT_m32))
384       D.Diag(diag::err_drv_argument_not_allowed_with)
385           << "-miamcu" << A->getBaseArg().getAsString(Args);
386 
387     Target.setArch(llvm::Triple::x86);
388     Target.setArchName("i586");
389     Target.setEnvironment(llvm::Triple::UnknownEnvironment);
390     Target.setEnvironmentName("");
391     Target.setOS(llvm::Triple::ELFIAMCU);
392     Target.setVendor(llvm::Triple::UnknownVendor);
393     Target.setVendorName("intel");
394   }
395 
396   return Target;
397 }
398 
399 // \brief Parse the LTO options and record the type of LTO compilation
400 // based on which -f(no-)?lto(=.*)? option occurs last.
401 void Driver::setLTOMode(const llvm::opt::ArgList &Args) {
402   LTOMode = LTOK_None;
403   if (!Args.hasFlag(options::OPT_flto, options::OPT_flto_EQ,
404                     options::OPT_fno_lto, false))
405     return;
406 
407   StringRef LTOName("full");
408 
409   const Arg *A = Args.getLastArg(options::OPT_flto_EQ);
410   if (A)
411     LTOName = A->getValue();
412 
413   LTOMode = llvm::StringSwitch<LTOKind>(LTOName)
414                 .Case("full", LTOK_Full)
415                 .Case("thin", LTOK_Thin)
416                 .Default(LTOK_Unknown);
417 
418   if (LTOMode == LTOK_Unknown) {
419     assert(A);
420     Diag(diag::err_drv_unsupported_option_argument) << A->getOption().getName()
421                                                     << A->getValue();
422   }
423 }
424 
425 void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
426                                               InputList &Inputs) {
427 
428   //
429   // CUDA
430   //
431   // We need to generate a CUDA toolchain if any of the inputs has a CUDA type.
432   if (llvm::any_of(Inputs, [](std::pair<types::ID, const llvm::opt::Arg *> &I) {
433         return types::isCuda(I.first);
434       })) {
435     const ToolChain &TC = getToolChain(
436         C.getInputArgs(),
437         llvm::Triple(C.getOffloadingHostToolChain()->getTriple().isArch64Bit()
438                          ? "nvptx64-nvidia-cuda"
439                          : "nvptx-nvidia-cuda"));
440     C.addOffloadDeviceToolChain(&TC, Action::OFK_Cuda);
441   }
442 
443   //
444   // TODO: Add support for other offloading programming models here.
445   //
446 
447   return;
448 }
449 
450 Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
451   llvm::PrettyStackTraceString CrashInfo("Compilation construction");
452 
453   // FIXME: Handle environment options which affect driver behavior, somewhere
454   // (client?). GCC_EXEC_PREFIX, LPATH, CC_PRINT_OPTIONS.
455 
456   if (char *env = ::getenv("COMPILER_PATH")) {
457     StringRef CompilerPath = env;
458     while (!CompilerPath.empty()) {
459       std::pair<StringRef, StringRef> Split =
460           CompilerPath.split(llvm::sys::EnvPathSeparator);
461       PrefixDirs.push_back(Split.first);
462       CompilerPath = Split.second;
463     }
464   }
465 
466   // We look for the driver mode option early, because the mode can affect
467   // how other options are parsed.
468   ParseDriverMode(ArgList.slice(1));
469 
470   // FIXME: What are we going to do with -V and -b?
471 
472   // FIXME: This stuff needs to go into the Compilation, not the driver.
473   bool CCCPrintPhases;
474 
475   InputArgList Args = ParseArgStrings(ArgList.slice(1));
476 
477   // Silence driver warnings if requested
478   Diags.setIgnoreAllWarnings(Args.hasArg(options::OPT_w));
479 
480   // -no-canonical-prefixes is used very early in main.
481   Args.ClaimAllArgs(options::OPT_no_canonical_prefixes);
482 
483   // Ignore -pipe.
484   Args.ClaimAllArgs(options::OPT_pipe);
485 
486   // Extract -ccc args.
487   //
488   // FIXME: We need to figure out where this behavior should live. Most of it
489   // should be outside in the client; the parts that aren't should have proper
490   // options, either by introducing new ones or by overloading gcc ones like -V
491   // or -b.
492   CCCPrintPhases = Args.hasArg(options::OPT_ccc_print_phases);
493   CCCPrintBindings = Args.hasArg(options::OPT_ccc_print_bindings);
494   if (const Arg *A = Args.getLastArg(options::OPT_ccc_gcc_name))
495     CCCGenericGCCName = A->getValue();
496   CCCUsePCH =
497       Args.hasFlag(options::OPT_ccc_pch_is_pch, options::OPT_ccc_pch_is_pth);
498   // FIXME: DefaultTargetTriple is used by the target-prefixed calls to as/ld
499   // and getToolChain is const.
500   if (IsCLMode()) {
501     // clang-cl targets MSVC-style Win32.
502     llvm::Triple T(DefaultTargetTriple);
503     T.setOS(llvm::Triple::Win32);
504     T.setVendor(llvm::Triple::PC);
505     T.setEnvironment(llvm::Triple::MSVC);
506     DefaultTargetTriple = T.str();
507   }
508   if (const Arg *A = Args.getLastArg(options::OPT_target))
509     DefaultTargetTriple = A->getValue();
510   if (const Arg *A = Args.getLastArg(options::OPT_ccc_install_dir))
511     Dir = InstalledDir = A->getValue();
512   for (const Arg *A : Args.filtered(options::OPT_B)) {
513     A->claim();
514     PrefixDirs.push_back(A->getValue(0));
515   }
516   if (const Arg *A = Args.getLastArg(options::OPT__sysroot_EQ))
517     SysRoot = A->getValue();
518   if (const Arg *A = Args.getLastArg(options::OPT__dyld_prefix_EQ))
519     DyldPrefix = A->getValue();
520   if (Args.hasArg(options::OPT_nostdlib))
521     UseStdLib = false;
522 
523   if (const Arg *A = Args.getLastArg(options::OPT_resource_dir))
524     ResourceDir = A->getValue();
525 
526   if (const Arg *A = Args.getLastArg(options::OPT_save_temps_EQ)) {
527     SaveTemps = llvm::StringSwitch<SaveTempsMode>(A->getValue())
528                     .Case("cwd", SaveTempsCwd)
529                     .Case("obj", SaveTempsObj)
530                     .Default(SaveTempsCwd);
531   }
532 
533   setLTOMode(Args);
534 
535   // Ignore -fembed-bitcode options with LTO
536   // since the output will be bitcode anyway.
537   if (getLTOMode() == LTOK_None) {
538     if (Arg *A = Args.getLastArg(options::OPT_fembed_bitcode_EQ)) {
539       StringRef Name = A->getValue();
540       unsigned Model = llvm::StringSwitch<unsigned>(Name)
541           .Case("off", EmbedNone)
542           .Case("all", EmbedBitcode)
543           .Case("bitcode", EmbedBitcode)
544           .Case("marker", EmbedMarker)
545           .Default(~0U);
546       if (Model == ~0U) {
547         Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args)
548                                                   << Name;
549       } else
550         BitcodeEmbed = static_cast<BitcodeEmbedMode>(Model);
551     }
552   } else {
553     // claim the bitcode option under LTO so no warning is issued.
554     Args.ClaimAllArgs(options::OPT_fembed_bitcode_EQ);
555   }
556 
557   std::unique_ptr<llvm::opt::InputArgList> UArgs =
558       llvm::make_unique<InputArgList>(std::move(Args));
559 
560   // Perform the default argument translations.
561   DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs);
562 
563   // Owned by the host.
564   const ToolChain &TC = getToolChain(
565       *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs));
566 
567   // The compilation takes ownership of Args.
568   Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs);
569 
570   if (!HandleImmediateArgs(*C))
571     return C;
572 
573   // Construct the list of inputs.
574   InputList Inputs;
575   BuildInputs(C->getDefaultToolChain(), *TranslatedArgs, Inputs);
576 
577   // Populate the tool chains for the offloading devices, if any.
578   CreateOffloadingDeviceToolChains(*C, Inputs);
579 
580   // Construct the list of abstract actions to perform for this compilation. On
581   // MachO targets this uses the driver-driver and universal actions.
582   if (TC.getTriple().isOSBinFormatMachO())
583     BuildUniversalActions(*C, C->getDefaultToolChain(), Inputs);
584   else
585     BuildActions(*C, C->getArgs(), Inputs, C->getActions());
586 
587   if (CCCPrintPhases) {
588     PrintActions(*C);
589     return C;
590   }
591 
592   BuildJobs(*C);
593 
594   return C;
595 }
596 
597 static void printArgList(raw_ostream &OS, const llvm::opt::ArgList &Args) {
598   llvm::opt::ArgStringList ASL;
599   for (const auto *A : Args)
600     A->render(Args, ASL);
601 
602   for (auto I = ASL.begin(), E = ASL.end(); I != E; ++I) {
603     if (I != ASL.begin())
604       OS << ' ';
605     Command::printArg(OS, *I, true);
606   }
607   OS << '\n';
608 }
609 
610 // When clang crashes, produce diagnostic information including the fully
611 // preprocessed source file(s).  Request that the developer attach the
612 // diagnostic information to a bug report.
613 void Driver::generateCompilationDiagnostics(Compilation &C,
614                                             const Command &FailingCommand) {
615   if (C.getArgs().hasArg(options::OPT_fno_crash_diagnostics))
616     return;
617 
618   // Don't try to generate diagnostics for link or dsymutil jobs.
619   if (FailingCommand.getCreator().isLinkJob() ||
620       FailingCommand.getCreator().isDsymutilJob())
621     return;
622 
623   // Print the version of the compiler.
624   PrintVersion(C, llvm::errs());
625 
626   Diag(clang::diag::note_drv_command_failed_diag_msg)
627       << "PLEASE submit a bug report to " BUG_REPORT_URL " and include the "
628          "crash backtrace, preprocessed source, and associated run script.";
629 
630   // Suppress driver output and emit preprocessor output to temp file.
631   Mode = CPPMode;
632   CCGenDiagnostics = true;
633 
634   // Save the original job command(s).
635   Command Cmd = FailingCommand;
636 
637   // Keep track of whether we produce any errors while trying to produce
638   // preprocessed sources.
639   DiagnosticErrorTrap Trap(Diags);
640 
641   // Suppress tool output.
642   C.initCompilationForDiagnostics();
643 
644   // Construct the list of inputs.
645   InputList Inputs;
646   BuildInputs(C.getDefaultToolChain(), C.getArgs(), Inputs);
647 
648   for (InputList::iterator it = Inputs.begin(), ie = Inputs.end(); it != ie;) {
649     bool IgnoreInput = false;
650 
651     // Ignore input from stdin or any inputs that cannot be preprocessed.
652     // Check type first as not all linker inputs have a value.
653     if (types::getPreprocessedType(it->first) == types::TY_INVALID) {
654       IgnoreInput = true;
655     } else if (!strcmp(it->second->getValue(), "-")) {
656       Diag(clang::diag::note_drv_command_failed_diag_msg)
657           << "Error generating preprocessed source(s) - "
658              "ignoring input from stdin.";
659       IgnoreInput = true;
660     }
661 
662     if (IgnoreInput) {
663       it = Inputs.erase(it);
664       ie = Inputs.end();
665     } else {
666       ++it;
667     }
668   }
669 
670   if (Inputs.empty()) {
671     Diag(clang::diag::note_drv_command_failed_diag_msg)
672         << "Error generating preprocessed source(s) - "
673            "no preprocessable inputs.";
674     return;
675   }
676 
677   // Don't attempt to generate preprocessed files if multiple -arch options are
678   // used, unless they're all duplicates.
679   llvm::StringSet<> ArchNames;
680   for (const Arg *A : C.getArgs()) {
681     if (A->getOption().matches(options::OPT_arch)) {
682       StringRef ArchName = A->getValue();
683       ArchNames.insert(ArchName);
684     }
685   }
686   if (ArchNames.size() > 1) {
687     Diag(clang::diag::note_drv_command_failed_diag_msg)
688         << "Error generating preprocessed source(s) - cannot generate "
689            "preprocessed source with multiple -arch options.";
690     return;
691   }
692 
693   // Construct the list of abstract actions to perform for this compilation. On
694   // Darwin OSes this uses the driver-driver and builds universal actions.
695   const ToolChain &TC = C.getDefaultToolChain();
696   if (TC.getTriple().isOSBinFormatMachO())
697     BuildUniversalActions(C, TC, Inputs);
698   else
699     BuildActions(C, C.getArgs(), Inputs, C.getActions());
700 
701   BuildJobs(C);
702 
703   // If there were errors building the compilation, quit now.
704   if (Trap.hasErrorOccurred()) {
705     Diag(clang::diag::note_drv_command_failed_diag_msg)
706         << "Error generating preprocessed source(s).";
707     return;
708   }
709 
710   // Generate preprocessed output.
711   SmallVector<std::pair<int, const Command *>, 4> FailingCommands;
712   C.ExecuteJobs(C.getJobs(), FailingCommands);
713 
714   // If any of the preprocessing commands failed, clean up and exit.
715   if (!FailingCommands.empty()) {
716     if (!isSaveTempsEnabled())
717       C.CleanupFileList(C.getTempFiles(), true);
718 
719     Diag(clang::diag::note_drv_command_failed_diag_msg)
720         << "Error generating preprocessed source(s).";
721     return;
722   }
723 
724   const ArgStringList &TempFiles = C.getTempFiles();
725   if (TempFiles.empty()) {
726     Diag(clang::diag::note_drv_command_failed_diag_msg)
727         << "Error generating preprocessed source(s).";
728     return;
729   }
730 
731   Diag(clang::diag::note_drv_command_failed_diag_msg)
732       << "\n********************\n\n"
733          "PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:\n"
734          "Preprocessed source(s) and associated run script(s) are located at:";
735 
736   SmallString<128> VFS;
737   for (const char *TempFile : TempFiles) {
738     Diag(clang::diag::note_drv_command_failed_diag_msg) << TempFile;
739     if (StringRef(TempFile).endswith(".cache")) {
740       // In some cases (modules) we'll dump extra data to help with reproducing
741       // the crash into a directory next to the output.
742       VFS = llvm::sys::path::filename(TempFile);
743       llvm::sys::path::append(VFS, "vfs", "vfs.yaml");
744     }
745   }
746 
747   // Assume associated files are based off of the first temporary file.
748   CrashReportInfo CrashInfo(TempFiles[0], VFS);
749 
750   std::string Script = CrashInfo.Filename.rsplit('.').first.str() + ".sh";
751   std::error_code EC;
752   llvm::raw_fd_ostream ScriptOS(Script, EC, llvm::sys::fs::F_Excl);
753   if (EC) {
754     Diag(clang::diag::note_drv_command_failed_diag_msg)
755         << "Error generating run script: " + Script + " " + EC.message();
756   } else {
757     ScriptOS << "# Crash reproducer for " << getClangFullVersion() << "\n"
758              << "# Driver args: ";
759     printArgList(ScriptOS, C.getInputArgs());
760     ScriptOS << "# Original command: ";
761     Cmd.Print(ScriptOS, "\n", /*Quote=*/true);
762     Cmd.Print(ScriptOS, "\n", /*Quote=*/true, &CrashInfo);
763     Diag(clang::diag::note_drv_command_failed_diag_msg) << Script;
764   }
765 
766   for (const auto &A : C.getArgs().filtered(options::OPT_frewrite_map_file,
767                                             options::OPT_frewrite_map_file_EQ))
768     Diag(clang::diag::note_drv_command_failed_diag_msg) << A->getValue();
769 
770   Diag(clang::diag::note_drv_command_failed_diag_msg)
771       << "\n\n********************";
772 }
773 
774 void Driver::setUpResponseFiles(Compilation &C, Command &Cmd) {
775   // Since commandLineFitsWithinSystemLimits() may underestimate system's capacity
776   // if the tool does not support response files, there is a chance/ that things
777   // will just work without a response file, so we silently just skip it.
778   if (Cmd.getCreator().getResponseFilesSupport() == Tool::RF_None ||
779       llvm::sys::commandLineFitsWithinSystemLimits(Cmd.getExecutable(), Cmd.getArguments()))
780     return;
781 
782   std::string TmpName = GetTemporaryPath("response", "txt");
783   Cmd.setResponseFile(
784       C.addTempFile(C.getArgs().MakeArgString(TmpName.c_str())));
785 }
786 
787 int Driver::ExecuteCompilation(
788     Compilation &C,
789     SmallVectorImpl<std::pair<int, const Command *>> &FailingCommands) {
790   // Just print if -### was present.
791   if (C.getArgs().hasArg(options::OPT__HASH_HASH_HASH)) {
792     C.getJobs().Print(llvm::errs(), "\n", true);
793     return 0;
794   }
795 
796   // If there were errors building the compilation, quit now.
797   if (Diags.hasErrorOccurred())
798     return 1;
799 
800   // Set up response file names for each command, if necessary
801   for (auto &Job : C.getJobs())
802     setUpResponseFiles(C, Job);
803 
804   C.ExecuteJobs(C.getJobs(), FailingCommands);
805 
806   // Remove temp files.
807   C.CleanupFileList(C.getTempFiles());
808 
809   // If the command succeeded, we are done.
810   if (FailingCommands.empty())
811     return 0;
812 
813   // Otherwise, remove result files and print extra information about abnormal
814   // failures.
815   for (const auto &CmdPair : FailingCommands) {
816     int Res = CmdPair.first;
817     const Command *FailingCommand = CmdPair.second;
818 
819     // Remove result files if we're not saving temps.
820     if (!isSaveTempsEnabled()) {
821       const JobAction *JA = cast<JobAction>(&FailingCommand->getSource());
822       C.CleanupFileMap(C.getResultFiles(), JA, true);
823 
824       // Failure result files are valid unless we crashed.
825       if (Res < 0)
826         C.CleanupFileMap(C.getFailureResultFiles(), JA, true);
827     }
828 
829     // Print extra information about abnormal failures, if possible.
830     //
831     // This is ad-hoc, but we don't want to be excessively noisy. If the result
832     // status was 1, assume the command failed normally. In particular, if it
833     // was the compiler then assume it gave a reasonable error code. Failures
834     // in other tools are less common, and they generally have worse
835     // diagnostics, so always print the diagnostic there.
836     const Tool &FailingTool = FailingCommand->getCreator();
837 
838     if (!FailingCommand->getCreator().hasGoodDiagnostics() || Res != 1) {
839       // FIXME: See FIXME above regarding result code interpretation.
840       if (Res < 0)
841         Diag(clang::diag::err_drv_command_signalled)
842             << FailingTool.getShortName();
843       else
844         Diag(clang::diag::err_drv_command_failed) << FailingTool.getShortName()
845                                                   << Res;
846     }
847   }
848   return 0;
849 }
850 
851 void Driver::PrintHelp(bool ShowHidden) const {
852   unsigned IncludedFlagsBitmask;
853   unsigned ExcludedFlagsBitmask;
854   std::tie(IncludedFlagsBitmask, ExcludedFlagsBitmask) =
855       getIncludeExcludeOptionFlagMasks();
856 
857   ExcludedFlagsBitmask |= options::NoDriverOption;
858   if (!ShowHidden)
859     ExcludedFlagsBitmask |= HelpHidden;
860 
861   getOpts().PrintHelp(llvm::outs(), Name.c_str(), DriverTitle.c_str(),
862                       IncludedFlagsBitmask, ExcludedFlagsBitmask);
863 }
864 
865 void Driver::PrintVersion(const Compilation &C, raw_ostream &OS) const {
866   // FIXME: The following handlers should use a callback mechanism, we don't
867   // know what the client would like to do.
868   OS << getClangFullVersion() << '\n';
869   const ToolChain &TC = C.getDefaultToolChain();
870   OS << "Target: " << TC.getTripleString() << '\n';
871 
872   // Print the threading model.
873   if (Arg *A = C.getArgs().getLastArg(options::OPT_mthread_model)) {
874     // Don't print if the ToolChain would have barfed on it already
875     if (TC.isThreadModelSupported(A->getValue()))
876       OS << "Thread model: " << A->getValue();
877   } else
878     OS << "Thread model: " << TC.getThreadModel();
879   OS << '\n';
880 
881   // Print out the install directory.
882   OS << "InstalledDir: " << InstalledDir << '\n';
883 }
884 
885 /// PrintDiagnosticCategories - Implement the --print-diagnostic-categories
886 /// option.
887 static void PrintDiagnosticCategories(raw_ostream &OS) {
888   // Skip the empty category.
889   for (unsigned i = 1, max = DiagnosticIDs::getNumberOfCategories(); i != max;
890        ++i)
891     OS << i << ',' << DiagnosticIDs::getCategoryNameFromID(i) << '\n';
892 }
893 
894 bool Driver::HandleImmediateArgs(const Compilation &C) {
895   // The order these options are handled in gcc is all over the place, but we
896   // don't expect inconsistencies w.r.t. that to matter in practice.
897 
898   if (C.getArgs().hasArg(options::OPT_dumpmachine)) {
899     llvm::outs() << C.getDefaultToolChain().getTripleString() << '\n';
900     return false;
901   }
902 
903   if (C.getArgs().hasArg(options::OPT_dumpversion)) {
904     // Since -dumpversion is only implemented for pedantic GCC compatibility, we
905     // return an answer which matches our definition of __VERSION__.
906     //
907     // If we want to return a more correct answer some day, then we should
908     // introduce a non-pedantically GCC compatible mode to Clang in which we
909     // provide sensible definitions for -dumpversion, __VERSION__, etc.
910     llvm::outs() << "4.2.1\n";
911     return false;
912   }
913 
914   if (C.getArgs().hasArg(options::OPT__print_diagnostic_categories)) {
915     PrintDiagnosticCategories(llvm::outs());
916     return false;
917   }
918 
919   if (C.getArgs().hasArg(options::OPT_help) ||
920       C.getArgs().hasArg(options::OPT__help_hidden)) {
921     PrintHelp(C.getArgs().hasArg(options::OPT__help_hidden));
922     return false;
923   }
924 
925   if (C.getArgs().hasArg(options::OPT__version)) {
926     // Follow gcc behavior and use stdout for --version and stderr for -v.
927     PrintVersion(C, llvm::outs());
928     return false;
929   }
930 
931   if (C.getArgs().hasArg(options::OPT_v) ||
932       C.getArgs().hasArg(options::OPT__HASH_HASH_HASH)) {
933     PrintVersion(C, llvm::errs());
934     SuppressMissingInputWarning = true;
935   }
936 
937   const ToolChain &TC = C.getDefaultToolChain();
938 
939   if (C.getArgs().hasArg(options::OPT_v))
940     TC.printVerboseInfo(llvm::errs());
941 
942   if (C.getArgs().hasArg(options::OPT_print_search_dirs)) {
943     llvm::outs() << "programs: =";
944     bool separator = false;
945     for (const std::string &Path : TC.getProgramPaths()) {
946       if (separator)
947         llvm::outs() << ':';
948       llvm::outs() << Path;
949       separator = true;
950     }
951     llvm::outs() << "\n";
952     llvm::outs() << "libraries: =" << ResourceDir;
953 
954     StringRef sysroot = C.getSysRoot();
955 
956     for (const std::string &Path : TC.getFilePaths()) {
957       // Always print a separator. ResourceDir was the first item shown.
958       llvm::outs() << ':';
959       // Interpretation of leading '=' is needed only for NetBSD.
960       if (Path[0] == '=')
961         llvm::outs() << sysroot << Path.substr(1);
962       else
963         llvm::outs() << Path;
964     }
965     llvm::outs() << "\n";
966     return false;
967   }
968 
969   // FIXME: The following handlers should use a callback mechanism, we don't
970   // know what the client would like to do.
971   if (Arg *A = C.getArgs().getLastArg(options::OPT_print_file_name_EQ)) {
972     llvm::outs() << GetFilePath(A->getValue(), TC) << "\n";
973     return false;
974   }
975 
976   if (Arg *A = C.getArgs().getLastArg(options::OPT_print_prog_name_EQ)) {
977     llvm::outs() << GetProgramPath(A->getValue(), TC) << "\n";
978     return false;
979   }
980 
981   if (C.getArgs().hasArg(options::OPT_print_libgcc_file_name)) {
982     llvm::outs() << GetFilePath("libgcc.a", TC) << "\n";
983     return false;
984   }
985 
986   if (C.getArgs().hasArg(options::OPT_print_multi_lib)) {
987     for (const Multilib &Multilib : TC.getMultilibs())
988       llvm::outs() << Multilib << "\n";
989     return false;
990   }
991 
992   if (C.getArgs().hasArg(options::OPT_print_multi_directory)) {
993     for (const Multilib &Multilib : TC.getMultilibs()) {
994       if (Multilib.gccSuffix().empty())
995         llvm::outs() << ".\n";
996       else {
997         StringRef Suffix(Multilib.gccSuffix());
998         assert(Suffix.front() == '/');
999         llvm::outs() << Suffix.substr(1) << "\n";
1000       }
1001     }
1002     return false;
1003   }
1004   return true;
1005 }
1006 
1007 // Display an action graph human-readably.  Action A is the "sink" node
1008 // and latest-occuring action. Traversal is in pre-order, visiting the
1009 // inputs to each action before printing the action itself.
1010 static unsigned PrintActions1(const Compilation &C, Action *A,
1011                               std::map<Action *, unsigned> &Ids) {
1012   if (Ids.count(A)) // A was already visited.
1013     return Ids[A];
1014 
1015   std::string str;
1016   llvm::raw_string_ostream os(str);
1017 
1018   os << Action::getClassName(A->getKind()) << ", ";
1019   if (InputAction *IA = dyn_cast<InputAction>(A)) {
1020     os << "\"" << IA->getInputArg().getValue() << "\"";
1021   } else if (BindArchAction *BIA = dyn_cast<BindArchAction>(A)) {
1022     os << '"' << BIA->getArchName() << '"' << ", {"
1023        << PrintActions1(C, *BIA->input_begin(), Ids) << "}";
1024   } else if (CudaDeviceAction *CDA = dyn_cast<CudaDeviceAction>(A)) {
1025     os << '"'
1026        << (CDA->getGpuArchName() ? CDA->getGpuArchName() : "(multiple archs)")
1027        << '"' << ", {" << PrintActions1(C, *CDA->input_begin(), Ids) << "}";
1028   } else {
1029     const ActionList *AL;
1030     if (CudaHostAction *CHA = dyn_cast<CudaHostAction>(A)) {
1031       os << "{" << PrintActions1(C, *CHA->input_begin(), Ids) << "}"
1032          << ", gpu binaries ";
1033       AL = &CHA->getDeviceActions();
1034     } else
1035       AL = &A->getInputs();
1036 
1037     if (AL->size()) {
1038       const char *Prefix = "{";
1039       for (Action *PreRequisite : *AL) {
1040         os << Prefix << PrintActions1(C, PreRequisite, Ids);
1041         Prefix = ", ";
1042       }
1043       os << "}";
1044     } else
1045       os << "{}";
1046   }
1047 
1048   unsigned Id = Ids.size();
1049   Ids[A] = Id;
1050   llvm::errs() << Id << ": " << os.str() << ", "
1051                << types::getTypeName(A->getType()) << "\n";
1052 
1053   return Id;
1054 }
1055 
1056 // Print the action graphs in a compilation C.
1057 // For example "clang -c file1.c file2.c" is composed of two subgraphs.
1058 void Driver::PrintActions(const Compilation &C) const {
1059   std::map<Action *, unsigned> Ids;
1060   for (Action *A : C.getActions())
1061     PrintActions1(C, A, Ids);
1062 }
1063 
1064 /// \brief Check whether the given input tree contains any compilation or
1065 /// assembly actions.
1066 static bool ContainsCompileOrAssembleAction(const Action *A) {
1067   if (isa<CompileJobAction>(A) || isa<BackendJobAction>(A) ||
1068       isa<AssembleJobAction>(A))
1069     return true;
1070 
1071   for (const Action *Input : A->inputs())
1072     if (ContainsCompileOrAssembleAction(Input))
1073       return true;
1074 
1075   return false;
1076 }
1077 
1078 void Driver::BuildUniversalActions(Compilation &C, const ToolChain &TC,
1079                                    const InputList &BAInputs) const {
1080   DerivedArgList &Args = C.getArgs();
1081   ActionList &Actions = C.getActions();
1082   llvm::PrettyStackTraceString CrashInfo("Building universal build actions");
1083   // Collect the list of architectures. Duplicates are allowed, but should only
1084   // be handled once (in the order seen).
1085   llvm::StringSet<> ArchNames;
1086   SmallVector<const char *, 4> Archs;
1087   for (Arg *A : Args) {
1088     if (A->getOption().matches(options::OPT_arch)) {
1089       // Validate the option here; we don't save the type here because its
1090       // particular spelling may participate in other driver choices.
1091       llvm::Triple::ArchType Arch =
1092           tools::darwin::getArchTypeForMachOArchName(A->getValue());
1093       if (Arch == llvm::Triple::UnknownArch) {
1094         Diag(clang::diag::err_drv_invalid_arch_name) << A->getAsString(Args);
1095         continue;
1096       }
1097 
1098       A->claim();
1099       if (ArchNames.insert(A->getValue()).second)
1100         Archs.push_back(A->getValue());
1101     }
1102   }
1103 
1104   // When there is no explicit arch for this platform, make sure we still bind
1105   // the architecture (to the default) so that -Xarch_ is handled correctly.
1106   if (!Archs.size())
1107     Archs.push_back(Args.MakeArgString(TC.getDefaultUniversalArchName()));
1108 
1109   ActionList SingleActions;
1110   BuildActions(C, Args, BAInputs, SingleActions);
1111 
1112   // Add in arch bindings for every top level action, as well as lipo and
1113   // dsymutil steps if needed.
1114   for (Action* Act : SingleActions) {
1115     // Make sure we can lipo this kind of output. If not (and it is an actual
1116     // output) then we disallow, since we can't create an output file with the
1117     // right name without overwriting it. We could remove this oddity by just
1118     // changing the output names to include the arch, which would also fix
1119     // -save-temps. Compatibility wins for now.
1120 
1121     if (Archs.size() > 1 && !types::canLipoType(Act->getType()))
1122       Diag(clang::diag::err_drv_invalid_output_with_multiple_archs)
1123           << types::getTypeName(Act->getType());
1124 
1125     ActionList Inputs;
1126     for (unsigned i = 0, e = Archs.size(); i != e; ++i)
1127       Inputs.push_back(C.MakeAction<BindArchAction>(Act, Archs[i]));
1128 
1129     // Lipo if necessary, we do it this way because we need to set the arch flag
1130     // so that -Xarch_ gets overwritten.
1131     if (Inputs.size() == 1 || Act->getType() == types::TY_Nothing)
1132       Actions.append(Inputs.begin(), Inputs.end());
1133     else
1134       Actions.push_back(C.MakeAction<LipoJobAction>(Inputs, Act->getType()));
1135 
1136     // Handle debug info queries.
1137     Arg *A = Args.getLastArg(options::OPT_g_Group);
1138     if (A && !A->getOption().matches(options::OPT_g0) &&
1139         !A->getOption().matches(options::OPT_gstabs) &&
1140         ContainsCompileOrAssembleAction(Actions.back())) {
1141 
1142       // Add a 'dsymutil' step if necessary, when debug info is enabled and we
1143       // have a compile input. We need to run 'dsymutil' ourselves in such cases
1144       // because the debug info will refer to a temporary object file which
1145       // will be removed at the end of the compilation process.
1146       if (Act->getType() == types::TY_Image) {
1147         ActionList Inputs;
1148         Inputs.push_back(Actions.back());
1149         Actions.pop_back();
1150         Actions.push_back(
1151             C.MakeAction<DsymutilJobAction>(Inputs, types::TY_dSYM));
1152       }
1153 
1154       // Verify the debug info output.
1155       if (Args.hasArg(options::OPT_verify_debug_info)) {
1156         Action* LastAction = Actions.back();
1157         Actions.pop_back();
1158         Actions.push_back(C.MakeAction<VerifyDebugInfoJobAction>(
1159             LastAction, types::TY_Nothing));
1160       }
1161     }
1162   }
1163 }
1164 
1165 /// \brief Check that the file referenced by Value exists. If it doesn't,
1166 /// issue a diagnostic and return false.
1167 static bool DiagnoseInputExistence(const Driver &D, const DerivedArgList &Args,
1168                                    StringRef Value, types::ID Ty) {
1169   if (!D.getCheckInputsExist())
1170     return true;
1171 
1172   // stdin always exists.
1173   if (Value == "-")
1174     return true;
1175 
1176   SmallString<64> Path(Value);
1177   if (Arg *WorkDir = Args.getLastArg(options::OPT_working_directory)) {
1178     if (!llvm::sys::path::is_absolute(Path)) {
1179       SmallString<64> Directory(WorkDir->getValue());
1180       llvm::sys::path::append(Directory, Value);
1181       Path.assign(Directory);
1182     }
1183   }
1184 
1185   if (llvm::sys::fs::exists(Twine(Path)))
1186     return true;
1187 
1188   if (D.IsCLMode()) {
1189     if (!llvm::sys::path::is_absolute(Twine(Path)) &&
1190         llvm::sys::Process::FindInEnvPath("LIB", Value))
1191       return true;
1192 
1193     if (Args.hasArg(options::OPT__SLASH_link) && Ty == types::TY_Object) {
1194       // Arguments to the /link flag might cause the linker to search for object
1195       // and library files in paths we don't know about. Don't error in such
1196       // cases.
1197       return true;
1198     }
1199   }
1200 
1201   D.Diag(clang::diag::err_drv_no_such_file) << Path;
1202   return false;
1203 }
1204 
1205 // Construct a the list of inputs and their types.
1206 void Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args,
1207                          InputList &Inputs) const {
1208   // Track the current user specified (-x) input. We also explicitly track the
1209   // argument used to set the type; we only want to claim the type when we
1210   // actually use it, so we warn about unused -x arguments.
1211   types::ID InputType = types::TY_Nothing;
1212   Arg *InputTypeArg = nullptr;
1213 
1214   // The last /TC or /TP option sets the input type to C or C++ globally.
1215   if (Arg *TCTP = Args.getLastArgNoClaim(options::OPT__SLASH_TC,
1216                                          options::OPT__SLASH_TP)) {
1217     InputTypeArg = TCTP;
1218     InputType = TCTP->getOption().matches(options::OPT__SLASH_TC)
1219                     ? types::TY_C
1220                     : types::TY_CXX;
1221 
1222     arg_iterator it =
1223         Args.filtered_begin(options::OPT__SLASH_TC, options::OPT__SLASH_TP);
1224     const arg_iterator ie = Args.filtered_end();
1225     Arg *Previous = *it++;
1226     bool ShowNote = false;
1227     while (it != ie) {
1228       Diag(clang::diag::warn_drv_overriding_flag_option)
1229           << Previous->getSpelling() << (*it)->getSpelling();
1230       Previous = *it++;
1231       ShowNote = true;
1232     }
1233     if (ShowNote)
1234       Diag(clang::diag::note_drv_t_option_is_global);
1235 
1236     // No driver mode exposes -x and /TC or /TP; we don't support mixing them.
1237     assert(!Args.hasArg(options::OPT_x) && "-x and /TC or /TP is not allowed");
1238   }
1239 
1240   for (Arg *A : Args) {
1241     if (A->getOption().getKind() == Option::InputClass) {
1242       const char *Value = A->getValue();
1243       types::ID Ty = types::TY_INVALID;
1244 
1245       // Infer the input type if necessary.
1246       if (InputType == types::TY_Nothing) {
1247         // If there was an explicit arg for this, claim it.
1248         if (InputTypeArg)
1249           InputTypeArg->claim();
1250 
1251         // stdin must be handled specially.
1252         if (memcmp(Value, "-", 2) == 0) {
1253           // If running with -E, treat as a C input (this changes the builtin
1254           // macros, for example). This may be overridden by -ObjC below.
1255           //
1256           // Otherwise emit an error but still use a valid type to avoid
1257           // spurious errors (e.g., no inputs).
1258           if (!Args.hasArgNoClaim(options::OPT_E) && !CCCIsCPP())
1259             Diag(IsCLMode() ? clang::diag::err_drv_unknown_stdin_type_clang_cl
1260                             : clang::diag::err_drv_unknown_stdin_type);
1261           Ty = types::TY_C;
1262         } else {
1263           // Otherwise lookup by extension.
1264           // Fallback is C if invoked as C preprocessor or Object otherwise.
1265           // We use a host hook here because Darwin at least has its own
1266           // idea of what .s is.
1267           if (const char *Ext = strrchr(Value, '.'))
1268             Ty = TC.LookupTypeForExtension(Ext + 1);
1269 
1270           if (Ty == types::TY_INVALID) {
1271             if (CCCIsCPP())
1272               Ty = types::TY_C;
1273             else
1274               Ty = types::TY_Object;
1275           }
1276 
1277           // If the driver is invoked as C++ compiler (like clang++ or c++) it
1278           // should autodetect some input files as C++ for g++ compatibility.
1279           if (CCCIsCXX()) {
1280             types::ID OldTy = Ty;
1281             Ty = types::lookupCXXTypeForCType(Ty);
1282 
1283             if (Ty != OldTy)
1284               Diag(clang::diag::warn_drv_treating_input_as_cxx)
1285                   << getTypeName(OldTy) << getTypeName(Ty);
1286           }
1287         }
1288 
1289         // -ObjC and -ObjC++ override the default language, but only for "source
1290         // files". We just treat everything that isn't a linker input as a
1291         // source file.
1292         //
1293         // FIXME: Clean this up if we move the phase sequence into the type.
1294         if (Ty != types::TY_Object) {
1295           if (Args.hasArg(options::OPT_ObjC))
1296             Ty = types::TY_ObjC;
1297           else if (Args.hasArg(options::OPT_ObjCXX))
1298             Ty = types::TY_ObjCXX;
1299         }
1300       } else {
1301         assert(InputTypeArg && "InputType set w/o InputTypeArg");
1302         if (!InputTypeArg->getOption().matches(options::OPT_x)) {
1303           // If emulating cl.exe, make sure that /TC and /TP don't affect input
1304           // object files.
1305           const char *Ext = strrchr(Value, '.');
1306           if (Ext && TC.LookupTypeForExtension(Ext + 1) == types::TY_Object)
1307             Ty = types::TY_Object;
1308         }
1309         if (Ty == types::TY_INVALID) {
1310           Ty = InputType;
1311           InputTypeArg->claim();
1312         }
1313       }
1314 
1315       if (DiagnoseInputExistence(*this, Args, Value, Ty))
1316         Inputs.push_back(std::make_pair(Ty, A));
1317 
1318     } else if (A->getOption().matches(options::OPT__SLASH_Tc)) {
1319       StringRef Value = A->getValue();
1320       if (DiagnoseInputExistence(*this, Args, Value, types::TY_C)) {
1321         Arg *InputArg = MakeInputArg(Args, Opts, A->getValue());
1322         Inputs.push_back(std::make_pair(types::TY_C, InputArg));
1323       }
1324       A->claim();
1325     } else if (A->getOption().matches(options::OPT__SLASH_Tp)) {
1326       StringRef Value = A->getValue();
1327       if (DiagnoseInputExistence(*this, Args, Value, types::TY_CXX)) {
1328         Arg *InputArg = MakeInputArg(Args, Opts, A->getValue());
1329         Inputs.push_back(std::make_pair(types::TY_CXX, InputArg));
1330       }
1331       A->claim();
1332     } else if (A->getOption().hasFlag(options::LinkerInput)) {
1333       // Just treat as object type, we could make a special type for this if
1334       // necessary.
1335       Inputs.push_back(std::make_pair(types::TY_Object, A));
1336 
1337     } else if (A->getOption().matches(options::OPT_x)) {
1338       InputTypeArg = A;
1339       InputType = types::lookupTypeForTypeSpecifier(A->getValue());
1340       A->claim();
1341 
1342       // Follow gcc behavior and treat as linker input for invalid -x
1343       // options. Its not clear why we shouldn't just revert to unknown; but
1344       // this isn't very important, we might as well be bug compatible.
1345       if (!InputType) {
1346         Diag(clang::diag::err_drv_unknown_language) << A->getValue();
1347         InputType = types::TY_Object;
1348       }
1349     }
1350   }
1351   if (CCCIsCPP() && Inputs.empty()) {
1352     // If called as standalone preprocessor, stdin is processed
1353     // if no other input is present.
1354     Arg *A = MakeInputArg(Args, Opts, "-");
1355     Inputs.push_back(std::make_pair(types::TY_C, A));
1356   }
1357 }
1358 
1359 // For each unique --cuda-gpu-arch= argument creates a TY_CUDA_DEVICE
1360 // input action and then wraps each in CudaDeviceAction paired with
1361 // appropriate GPU arch name. In case of partial (i.e preprocessing
1362 // only) or device-only compilation, each device action is added to /p
1363 // Actions and /p Current is released. Otherwise the function creates
1364 // and returns a new CudaHostAction which wraps /p Current and device
1365 // side actions.
1366 static Action *buildCudaActions(Compilation &C, DerivedArgList &Args,
1367                                 const Arg *InputArg, Action *HostAction,
1368                                 ActionList &Actions) {
1369   Arg *PartialCompilationArg = Args.getLastArg(
1370       options::OPT_cuda_host_only, options::OPT_cuda_device_only,
1371       options::OPT_cuda_compile_host_device);
1372   bool CompileHostOnly =
1373       PartialCompilationArg &&
1374       PartialCompilationArg->getOption().matches(options::OPT_cuda_host_only);
1375   bool CompileDeviceOnly =
1376       PartialCompilationArg &&
1377       PartialCompilationArg->getOption().matches(options::OPT_cuda_device_only);
1378 
1379   if (CompileHostOnly)
1380     return C.MakeAction<CudaHostAction>(HostAction, ActionList());
1381 
1382   // Collect all cuda_gpu_arch parameters, removing duplicates.
1383   SmallVector<const char *, 4> GpuArchList;
1384   llvm::StringSet<> GpuArchNames;
1385   for (Arg *A : Args) {
1386     if (!A->getOption().matches(options::OPT_cuda_gpu_arch_EQ))
1387       continue;
1388     A->claim();
1389 
1390     const auto& Arch = A->getValue();
1391     if (!CudaDeviceAction::IsValidGpuArchName(Arch))
1392       C.getDriver().Diag(clang::diag::err_drv_cuda_bad_gpu_arch) << Arch;
1393     else if (GpuArchNames.insert(Arch).second)
1394       GpuArchList.push_back(Arch);
1395   }
1396 
1397   // Default to sm_20 which is the lowest common denominator for supported GPUs.
1398   // sm_20 code should work correctly, if suboptimally, on all newer GPUs.
1399   if (GpuArchList.empty())
1400     GpuArchList.push_back("sm_20");
1401 
1402   // Replicate inputs for each GPU architecture.
1403   Driver::InputList CudaDeviceInputs;
1404   for (unsigned I = 0, E = GpuArchList.size(); I != E; ++I)
1405     CudaDeviceInputs.push_back(std::make_pair(types::TY_CUDA_DEVICE, InputArg));
1406 
1407   // Build actions for all device inputs.
1408   assert(C.getSingleOffloadToolChain<Action::OFK_Cuda>() &&
1409          "Missing toolchain for device-side compilation.");
1410   ActionList CudaDeviceActions;
1411   C.getDriver().BuildActions(C, Args, CudaDeviceInputs, CudaDeviceActions);
1412   assert(GpuArchList.size() == CudaDeviceActions.size() &&
1413          "Failed to create actions for all devices");
1414 
1415   // Check whether any of device actions stopped before they could generate PTX.
1416   bool PartialCompilation =
1417       llvm::any_of(CudaDeviceActions, [](const Action *a) {
1418         return a->getKind() != Action::AssembleJobClass;
1419       });
1420 
1421   // Figure out what to do with device actions -- pass them as inputs to the
1422   // host action or run each of them independently.
1423   if (PartialCompilation || CompileDeviceOnly) {
1424     // In case of partial or device-only compilation results of device actions
1425     // are not consumed by the host action device actions have to be added to
1426     // top-level actions list with AtTopLevel=true and run independently.
1427 
1428     // -o is ambiguous if we have more than one top-level action.
1429     if (Args.hasArg(options::OPT_o) &&
1430         (!CompileDeviceOnly || GpuArchList.size() > 1)) {
1431       C.getDriver().Diag(
1432           clang::diag::err_drv_output_argument_with_multiple_files);
1433       return nullptr;
1434     }
1435 
1436     for (unsigned I = 0, E = GpuArchList.size(); I != E; ++I)
1437       Actions.push_back(C.MakeAction<CudaDeviceAction>(CudaDeviceActions[I],
1438                                                        GpuArchList[I],
1439                                                        /* AtTopLevel */ true));
1440     // Kill host action in case of device-only compilation.
1441     if (CompileDeviceOnly)
1442       return nullptr;
1443     return HostAction;
1444   }
1445 
1446   // If we're not a partial or device-only compilation, we compile each arch to
1447   // ptx and assemble to cubin, then feed the cubin *and* the ptx into a device
1448   // "link" action, which uses fatbinary to combine these cubins into one
1449   // fatbin.  The fatbin is then an input to the host compilation.
1450   ActionList DeviceActions;
1451   for (unsigned I = 0, E = GpuArchList.size(); I != E; ++I) {
1452     Action* AssembleAction = CudaDeviceActions[I];
1453     assert(AssembleAction->getType() == types::TY_Object);
1454     assert(AssembleAction->getInputs().size() == 1);
1455 
1456     Action* BackendAction = AssembleAction->getInputs()[0];
1457     assert(BackendAction->getType() == types::TY_PP_Asm);
1458 
1459     for (const auto& A : {AssembleAction, BackendAction}) {
1460       DeviceActions.push_back(C.MakeAction<CudaDeviceAction>(
1461           A, GpuArchList[I], /* AtTopLevel */ false));
1462     }
1463   }
1464   auto FatbinAction = C.MakeAction<CudaDeviceAction>(
1465       C.MakeAction<LinkJobAction>(DeviceActions, types::TY_CUDA_FATBIN),
1466       /* GpuArchName = */ nullptr,
1467       /* AtTopLevel = */ false);
1468   // Return a new host action that incorporates original host action and all
1469   // device actions.
1470   return C.MakeAction<CudaHostAction>(std::move(HostAction),
1471                                       ActionList({FatbinAction}));
1472 }
1473 
1474 void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
1475                           const InputList &Inputs, ActionList &Actions) const {
1476   llvm::PrettyStackTraceString CrashInfo("Building compilation actions");
1477 
1478   if (!SuppressMissingInputWarning && Inputs.empty()) {
1479     Diag(clang::diag::err_drv_no_input_files);
1480     return;
1481   }
1482 
1483   Arg *FinalPhaseArg;
1484   phases::ID FinalPhase = getFinalPhase(Args, &FinalPhaseArg);
1485 
1486   if (FinalPhase == phases::Link && Args.hasArg(options::OPT_emit_llvm)) {
1487     Diag(clang::diag::err_drv_emit_llvm_link);
1488   }
1489 
1490   // Reject -Z* at the top level, these options should never have been exposed
1491   // by gcc.
1492   if (Arg *A = Args.getLastArg(options::OPT_Z_Joined))
1493     Diag(clang::diag::err_drv_use_of_Z_option) << A->getAsString(Args);
1494 
1495   // Diagnose misuse of /Fo.
1496   if (Arg *A = Args.getLastArg(options::OPT__SLASH_Fo)) {
1497     StringRef V = A->getValue();
1498     if (Inputs.size() > 1 && !V.empty() &&
1499         !llvm::sys::path::is_separator(V.back())) {
1500       // Check whether /Fo tries to name an output file for multiple inputs.
1501       Diag(clang::diag::err_drv_out_file_argument_with_multiple_sources)
1502           << A->getSpelling() << V;
1503       Args.eraseArg(options::OPT__SLASH_Fo);
1504     }
1505   }
1506 
1507   // Diagnose misuse of /Fa.
1508   if (Arg *A = Args.getLastArg(options::OPT__SLASH_Fa)) {
1509     StringRef V = A->getValue();
1510     if (Inputs.size() > 1 && !V.empty() &&
1511         !llvm::sys::path::is_separator(V.back())) {
1512       // Check whether /Fa tries to name an asm file for multiple inputs.
1513       Diag(clang::diag::err_drv_out_file_argument_with_multiple_sources)
1514           << A->getSpelling() << V;
1515       Args.eraseArg(options::OPT__SLASH_Fa);
1516     }
1517   }
1518 
1519   // Diagnose misuse of /o.
1520   if (Arg *A = Args.getLastArg(options::OPT__SLASH_o)) {
1521     if (A->getValue()[0] == '\0') {
1522       // It has to have a value.
1523       Diag(clang::diag::err_drv_missing_argument) << A->getSpelling() << 1;
1524       Args.eraseArg(options::OPT__SLASH_o);
1525     }
1526   }
1527 
1528   // Diagnose unsupported forms of /Yc /Yu. Ignore /Yc/Yu for now if:
1529   // * no filename after it
1530   // * both /Yc and /Yu passed but with different filenames
1531   // * corresponding file not also passed as /FI
1532   Arg *YcArg = Args.getLastArg(options::OPT__SLASH_Yc);
1533   Arg *YuArg = Args.getLastArg(options::OPT__SLASH_Yu);
1534   if (YcArg && YcArg->getValue()[0] == '\0') {
1535     Diag(clang::diag::warn_drv_ycyu_no_arg_clang_cl) << YcArg->getSpelling();
1536     Args.eraseArg(options::OPT__SLASH_Yc);
1537     YcArg = nullptr;
1538   }
1539   if (YuArg && YuArg->getValue()[0] == '\0') {
1540     Diag(clang::diag::warn_drv_ycyu_no_arg_clang_cl) << YuArg->getSpelling();
1541     Args.eraseArg(options::OPT__SLASH_Yu);
1542     YuArg = nullptr;
1543   }
1544   if (YcArg && YuArg && strcmp(YcArg->getValue(), YuArg->getValue()) != 0) {
1545     Diag(clang::diag::warn_drv_ycyu_different_arg_clang_cl);
1546     Args.eraseArg(options::OPT__SLASH_Yc);
1547     Args.eraseArg(options::OPT__SLASH_Yu);
1548     YcArg = YuArg = nullptr;
1549   }
1550   if (YcArg || YuArg) {
1551     StringRef Val = YcArg ? YcArg->getValue() : YuArg->getValue();
1552     bool FoundMatchingInclude = false;
1553     for (const Arg *Inc : Args.filtered(options::OPT_include)) {
1554       // FIXME: Do case-insensitive matching and consider / and \ as equal.
1555       if (Inc->getValue() == Val)
1556         FoundMatchingInclude = true;
1557     }
1558     if (!FoundMatchingInclude) {
1559       Diag(clang::diag::warn_drv_ycyu_no_fi_arg_clang_cl)
1560           << (YcArg ? YcArg : YuArg)->getSpelling();
1561       Args.eraseArg(options::OPT__SLASH_Yc);
1562       Args.eraseArg(options::OPT__SLASH_Yu);
1563       YcArg = YuArg = nullptr;
1564     }
1565   }
1566   if (YcArg && Inputs.size() > 1) {
1567     Diag(clang::diag::warn_drv_yc_multiple_inputs_clang_cl);
1568     Args.eraseArg(options::OPT__SLASH_Yc);
1569     YcArg = nullptr;
1570   }
1571   if (Args.hasArg(options::OPT__SLASH_Y_)) {
1572     // /Y- disables all pch handling.  Rather than check for it everywhere,
1573     // just remove clang-cl pch-related flags here.
1574     Args.eraseArg(options::OPT__SLASH_Fp);
1575     Args.eraseArg(options::OPT__SLASH_Yc);
1576     Args.eraseArg(options::OPT__SLASH_Yu);
1577     YcArg = YuArg = nullptr;
1578   }
1579 
1580   // Construct the actions to perform.
1581   ActionList LinkerInputs;
1582 
1583   llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> PL;
1584   for (auto &I : Inputs) {
1585     types::ID InputType = I.first;
1586     const Arg *InputArg = I.second;
1587 
1588     PL.clear();
1589     types::getCompilationPhases(InputType, PL);
1590 
1591     // If the first step comes after the final phase we are doing as part of
1592     // this compilation, warn the user about it.
1593     phases::ID InitialPhase = PL[0];
1594     if (InitialPhase > FinalPhase) {
1595       // Claim here to avoid the more general unused warning.
1596       InputArg->claim();
1597 
1598       // Suppress all unused style warnings with -Qunused-arguments
1599       if (Args.hasArg(options::OPT_Qunused_arguments))
1600         continue;
1601 
1602       // Special case when final phase determined by binary name, rather than
1603       // by a command-line argument with a corresponding Arg.
1604       if (CCCIsCPP())
1605         Diag(clang::diag::warn_drv_input_file_unused_by_cpp)
1606             << InputArg->getAsString(Args) << getPhaseName(InitialPhase);
1607       // Special case '-E' warning on a previously preprocessed file to make
1608       // more sense.
1609       else if (InitialPhase == phases::Compile &&
1610                FinalPhase == phases::Preprocess &&
1611                getPreprocessedType(InputType) == types::TY_INVALID)
1612         Diag(clang::diag::warn_drv_preprocessed_input_file_unused)
1613             << InputArg->getAsString(Args) << !!FinalPhaseArg
1614             << (FinalPhaseArg ? FinalPhaseArg->getOption().getName() : "");
1615       else
1616         Diag(clang::diag::warn_drv_input_file_unused)
1617             << InputArg->getAsString(Args) << getPhaseName(InitialPhase)
1618             << !!FinalPhaseArg
1619             << (FinalPhaseArg ? FinalPhaseArg->getOption().getName() : "");
1620       continue;
1621     }
1622 
1623     if (YcArg) {
1624       // Add a separate precompile phase for the compile phase.
1625       if (FinalPhase >= phases::Compile) {
1626         llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> PCHPL;
1627         types::getCompilationPhases(types::TY_CXXHeader, PCHPL);
1628         Arg *PchInputArg = MakeInputArg(Args, Opts, YcArg->getValue());
1629 
1630         // Build the pipeline for the pch file.
1631         Action *ClangClPch = C.MakeAction<InputAction>(*PchInputArg, InputType);
1632         for (phases::ID Phase : PCHPL)
1633           ClangClPch = ConstructPhaseAction(C, Args, Phase, ClangClPch);
1634         assert(ClangClPch);
1635         Actions.push_back(ClangClPch);
1636         // The driver currently exits after the first failed command.  This
1637         // relies on that behavior, to make sure if the pch generation fails,
1638         // the main compilation won't run.
1639       }
1640     }
1641 
1642     phases::ID CudaInjectionPhase =
1643         (phases::Compile < FinalPhase &&
1644          llvm::find(PL, phases::Compile) != PL.end())
1645             ? phases::Compile
1646             : FinalPhase;
1647 
1648     // Build the pipeline for this file.
1649     Action *Current = C.MakeAction<InputAction>(*InputArg, InputType);
1650     for (SmallVectorImpl<phases::ID>::iterator i = PL.begin(), e = PL.end();
1651          i != e; ++i) {
1652       phases::ID Phase = *i;
1653 
1654       // We are done if this step is past what the user requested.
1655       if (Phase > FinalPhase)
1656         break;
1657 
1658       // Queue linker inputs.
1659       if (Phase == phases::Link) {
1660         assert((i + 1) == e && "linking must be final compilation step.");
1661         LinkerInputs.push_back(Current);
1662         Current = nullptr;
1663         break;
1664       }
1665 
1666       // Some types skip the assembler phase (e.g., llvm-bc), but we can't
1667       // encode this in the steps because the intermediate type depends on
1668       // arguments. Just special case here.
1669       if (Phase == phases::Assemble && Current->getType() != types::TY_PP_Asm)
1670         continue;
1671 
1672       // Otherwise construct the appropriate action.
1673       Current = ConstructPhaseAction(C, Args, Phase, Current);
1674 
1675       if (InputType == types::TY_CUDA && Phase == CudaInjectionPhase) {
1676         Current = buildCudaActions(C, Args, InputArg, Current, Actions);
1677         if (!Current)
1678           break;
1679       }
1680 
1681       if (Current->getType() == types::TY_Nothing)
1682         break;
1683     }
1684 
1685     // If we ended with something, add to the output list.
1686     if (Current)
1687       Actions.push_back(Current);
1688   }
1689 
1690   // Add a link action if necessary.
1691   if (!LinkerInputs.empty())
1692     Actions.push_back(
1693         C.MakeAction<LinkJobAction>(LinkerInputs, types::TY_Image));
1694 
1695   // If we are linking, claim any options which are obviously only used for
1696   // compilation.
1697   if (FinalPhase == phases::Link && PL.size() == 1) {
1698     Args.ClaimAllArgs(options::OPT_CompileOnly_Group);
1699     Args.ClaimAllArgs(options::OPT_cl_compile_Group);
1700   }
1701 
1702   // Claim ignored clang-cl options.
1703   Args.ClaimAllArgs(options::OPT_cl_ignored_Group);
1704 
1705   // Claim --cuda-host-only and --cuda-compile-host-device, which may be passed
1706   // to non-CUDA compilations and should not trigger warnings there.
1707   Args.ClaimAllArgs(options::OPT_cuda_host_only);
1708   Args.ClaimAllArgs(options::OPT_cuda_compile_host_device);
1709 }
1710 
1711 Action *Driver::ConstructPhaseAction(Compilation &C, const ArgList &Args,
1712                                      phases::ID Phase, Action *Input) const {
1713   llvm::PrettyStackTraceString CrashInfo("Constructing phase actions");
1714   // Build the appropriate action.
1715   switch (Phase) {
1716   case phases::Link:
1717     llvm_unreachable("link action invalid here.");
1718   case phases::Preprocess: {
1719     types::ID OutputTy;
1720     // -{M, MM} alter the output type.
1721     if (Args.hasArg(options::OPT_M, options::OPT_MM)) {
1722       OutputTy = types::TY_Dependencies;
1723     } else {
1724       OutputTy = Input->getType();
1725       if (!Args.hasFlag(options::OPT_frewrite_includes,
1726                         options::OPT_fno_rewrite_includes, false) &&
1727           !CCGenDiagnostics)
1728         OutputTy = types::getPreprocessedType(OutputTy);
1729       assert(OutputTy != types::TY_INVALID &&
1730              "Cannot preprocess this input type!");
1731     }
1732     return C.MakeAction<PreprocessJobAction>(Input, OutputTy);
1733   }
1734   case phases::Precompile: {
1735     types::ID OutputTy = types::TY_PCH;
1736     if (Args.hasArg(options::OPT_fsyntax_only)) {
1737       // Syntax checks should not emit a PCH file
1738       OutputTy = types::TY_Nothing;
1739     }
1740     return C.MakeAction<PrecompileJobAction>(Input, OutputTy);
1741   }
1742   case phases::Compile: {
1743     if (Args.hasArg(options::OPT_fsyntax_only))
1744       return C.MakeAction<CompileJobAction>(Input, types::TY_Nothing);
1745     if (Args.hasArg(options::OPT_rewrite_objc))
1746       return C.MakeAction<CompileJobAction>(Input, types::TY_RewrittenObjC);
1747     if (Args.hasArg(options::OPT_rewrite_legacy_objc))
1748       return C.MakeAction<CompileJobAction>(Input,
1749                                             types::TY_RewrittenLegacyObjC);
1750     if (Args.hasArg(options::OPT__analyze, options::OPT__analyze_auto))
1751       return C.MakeAction<AnalyzeJobAction>(Input, types::TY_Plist);
1752     if (Args.hasArg(options::OPT__migrate))
1753       return C.MakeAction<MigrateJobAction>(Input, types::TY_Remap);
1754     if (Args.hasArg(options::OPT_emit_ast))
1755       return C.MakeAction<CompileJobAction>(Input, types::TY_AST);
1756     if (Args.hasArg(options::OPT_module_file_info))
1757       return C.MakeAction<CompileJobAction>(Input, types::TY_ModuleFile);
1758     if (Args.hasArg(options::OPT_verify_pch))
1759       return C.MakeAction<VerifyPCHJobAction>(Input, types::TY_Nothing);
1760     return C.MakeAction<CompileJobAction>(Input, types::TY_LLVM_BC);
1761   }
1762   case phases::Backend: {
1763     if (isUsingLTO()) {
1764       types::ID Output =
1765           Args.hasArg(options::OPT_S) ? types::TY_LTO_IR : types::TY_LTO_BC;
1766       return C.MakeAction<BackendJobAction>(Input, Output);
1767     }
1768     if (Args.hasArg(options::OPT_emit_llvm)) {
1769       types::ID Output =
1770           Args.hasArg(options::OPT_S) ? types::TY_LLVM_IR : types::TY_LLVM_BC;
1771       return C.MakeAction<BackendJobAction>(Input, Output);
1772     }
1773     return C.MakeAction<BackendJobAction>(Input, types::TY_PP_Asm);
1774   }
1775   case phases::Assemble:
1776     return C.MakeAction<AssembleJobAction>(std::move(Input), types::TY_Object);
1777   }
1778 
1779   llvm_unreachable("invalid phase in ConstructPhaseAction");
1780 }
1781 
1782 void Driver::BuildJobs(Compilation &C) const {
1783   llvm::PrettyStackTraceString CrashInfo("Building compilation jobs");
1784 
1785   Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o);
1786 
1787   // It is an error to provide a -o option if we are making multiple output
1788   // files.
1789   if (FinalOutput) {
1790     unsigned NumOutputs = 0;
1791     for (const Action *A : C.getActions())
1792       if (A->getType() != types::TY_Nothing)
1793         ++NumOutputs;
1794 
1795     if (NumOutputs > 1) {
1796       Diag(clang::diag::err_drv_output_argument_with_multiple_files);
1797       FinalOutput = nullptr;
1798     }
1799   }
1800 
1801   // Collect the list of architectures.
1802   llvm::StringSet<> ArchNames;
1803   if (C.getDefaultToolChain().getTriple().isOSBinFormatMachO())
1804     for (const Arg *A : C.getArgs())
1805       if (A->getOption().matches(options::OPT_arch))
1806         ArchNames.insert(A->getValue());
1807 
1808   // Set of (Action, canonical ToolChain triple) pairs we've built jobs for.
1809   std::map<std::pair<const Action *, std::string>, InputInfo> CachedResults;
1810   for (Action *A : C.getActions()) {
1811     // If we are linking an image for multiple archs then the linker wants
1812     // -arch_multiple and -final_output <final image name>. Unfortunately, this
1813     // doesn't fit in cleanly because we have to pass this information down.
1814     //
1815     // FIXME: This is a hack; find a cleaner way to integrate this into the
1816     // process.
1817     const char *LinkingOutput = nullptr;
1818     if (isa<LipoJobAction>(A)) {
1819       if (FinalOutput)
1820         LinkingOutput = FinalOutput->getValue();
1821       else
1822         LinkingOutput = getDefaultImageName();
1823     }
1824 
1825     BuildJobsForAction(C, A, &C.getDefaultToolChain(),
1826                        /*BoundArch*/ nullptr,
1827                        /*AtTopLevel*/ true,
1828                        /*MultipleArchs*/ ArchNames.size() > 1,
1829                        /*LinkingOutput*/ LinkingOutput, CachedResults);
1830   }
1831 
1832   // If the user passed -Qunused-arguments or there were errors, don't warn
1833   // about any unused arguments.
1834   if (Diags.hasErrorOccurred() ||
1835       C.getArgs().hasArg(options::OPT_Qunused_arguments))
1836     return;
1837 
1838   // Claim -### here.
1839   (void)C.getArgs().hasArg(options::OPT__HASH_HASH_HASH);
1840 
1841   // Claim --driver-mode, --rsp-quoting, it was handled earlier.
1842   (void)C.getArgs().hasArg(options::OPT_driver_mode);
1843   (void)C.getArgs().hasArg(options::OPT_rsp_quoting);
1844 
1845   for (Arg *A : C.getArgs()) {
1846     // FIXME: It would be nice to be able to send the argument to the
1847     // DiagnosticsEngine, so that extra values, position, and so on could be
1848     // printed.
1849     if (!A->isClaimed()) {
1850       if (A->getOption().hasFlag(options::NoArgumentUnused))
1851         continue;
1852 
1853       // Suppress the warning automatically if this is just a flag, and it is an
1854       // instance of an argument we already claimed.
1855       const Option &Opt = A->getOption();
1856       if (Opt.getKind() == Option::FlagClass) {
1857         bool DuplicateClaimed = false;
1858 
1859         for (const Arg *AA : C.getArgs().filtered(&Opt)) {
1860           if (AA->isClaimed()) {
1861             DuplicateClaimed = true;
1862             break;
1863           }
1864         }
1865 
1866         if (DuplicateClaimed)
1867           continue;
1868       }
1869 
1870       // In clang-cl, don't mention unknown arguments here since they have
1871       // already been warned about.
1872       if (!IsCLMode() || !A->getOption().matches(options::OPT_UNKNOWN))
1873         Diag(clang::diag::warn_drv_unused_argument)
1874             << A->getAsString(C.getArgs());
1875     }
1876   }
1877 }
1878 
1879 // Returns a Tool for a given JobAction.  In case the action and its
1880 // predecessors can be combined, updates Inputs with the inputs of the
1881 // first combined action. If one of the collapsed actions is a
1882 // CudaHostAction, updates CollapsedCHA with the pointer to it so the
1883 // caller can deal with extra handling such action requires.
1884 static const Tool *selectToolForJob(Compilation &C, bool SaveTemps,
1885                                     bool EmbedBitcode, const ToolChain *TC,
1886                                     const JobAction *JA,
1887                                     const ActionList *&Inputs,
1888                                     const CudaHostAction *&CollapsedCHA) {
1889   const Tool *ToolForJob = nullptr;
1890   CollapsedCHA = nullptr;
1891 
1892   // See if we should look for a compiler with an integrated assembler. We match
1893   // bottom up, so what we are actually looking for is an assembler job with a
1894   // compiler input.
1895 
1896   if (TC->useIntegratedAs() && !SaveTemps &&
1897       !C.getArgs().hasArg(options::OPT_via_file_asm) &&
1898       !C.getArgs().hasArg(options::OPT__SLASH_FA) &&
1899       !C.getArgs().hasArg(options::OPT__SLASH_Fa) &&
1900       isa<AssembleJobAction>(JA) && Inputs->size() == 1 &&
1901       isa<BackendJobAction>(*Inputs->begin())) {
1902     // A BackendJob is always preceded by a CompileJob, and without -save-temps
1903     // or -fembed-bitcode, they will always get combined together, so instead of
1904     // checking the backend tool, check if the tool for the CompileJob has an
1905     // integrated assembler. For -fembed-bitcode, CompileJob is still used to
1906     // look up tools for BackendJob, but they need to match before we can split
1907     // them.
1908     const ActionList *BackendInputs = &(*Inputs)[0]->getInputs();
1909     // Compile job may be wrapped in CudaHostAction, extract it if
1910     // that's the case and update CollapsedCHA if we combine phases.
1911     CudaHostAction *CHA = dyn_cast<CudaHostAction>(*BackendInputs->begin());
1912     JobAction *CompileJA = cast<CompileJobAction>(
1913         CHA ? *CHA->input_begin() : *BackendInputs->begin());
1914     assert(CompileJA && "Backend job is not preceeded by compile job.");
1915     const Tool *Compiler = TC->SelectTool(*CompileJA);
1916     if (!Compiler)
1917       return nullptr;
1918     // When using -fembed-bitcode, it is required to have the same tool (clang)
1919     // for both CompilerJA and BackendJA. Otherwise, combine two stages.
1920     if (EmbedBitcode) {
1921       JobAction *InputJA = cast<JobAction>(*Inputs->begin());
1922       const Tool *BackendTool = TC->SelectTool(*InputJA);
1923       if (BackendTool == Compiler)
1924         CompileJA = InputJA;
1925     }
1926     if (Compiler->hasIntegratedAssembler()) {
1927       Inputs = &CompileJA->getInputs();
1928       ToolForJob = Compiler;
1929       CollapsedCHA = CHA;
1930     }
1931   }
1932 
1933   // A backend job should always be combined with the preceding compile job
1934   // unless OPT_save_temps or OPT_fembed_bitcode is enabled and the compiler is
1935   // capable of emitting LLVM IR as an intermediate output.
1936   if (isa<BackendJobAction>(JA)) {
1937     // Check if the compiler supports emitting LLVM IR.
1938     assert(Inputs->size() == 1);
1939     // Compile job may be wrapped in CudaHostAction, extract it if
1940     // that's the case and update CollapsedCHA if we combine phases.
1941     CudaHostAction *CHA = dyn_cast<CudaHostAction>(*Inputs->begin());
1942     JobAction *CompileJA =
1943         cast<CompileJobAction>(CHA ? *CHA->input_begin() : *Inputs->begin());
1944     assert(CompileJA && "Backend job is not preceeded by compile job.");
1945     const Tool *Compiler = TC->SelectTool(*CompileJA);
1946     if (!Compiler)
1947       return nullptr;
1948     if (!Compiler->canEmitIR() ||
1949         (!SaveTemps && !EmbedBitcode)) {
1950       Inputs = &CompileJA->getInputs();
1951       ToolForJob = Compiler;
1952       CollapsedCHA = CHA;
1953     }
1954   }
1955 
1956   // Otherwise use the tool for the current job.
1957   if (!ToolForJob)
1958     ToolForJob = TC->SelectTool(*JA);
1959 
1960   // See if we should use an integrated preprocessor. We do so when we have
1961   // exactly one input, since this is the only use case we care about
1962   // (irrelevant since we don't support combine yet).
1963   if (Inputs->size() == 1 && isa<PreprocessJobAction>(*Inputs->begin()) &&
1964       !C.getArgs().hasArg(options::OPT_no_integrated_cpp) &&
1965       !C.getArgs().hasArg(options::OPT_traditional_cpp) && !SaveTemps &&
1966       !C.getArgs().hasArg(options::OPT_rewrite_objc) &&
1967       ToolForJob->hasIntegratedCPP())
1968     Inputs = &(*Inputs)[0]->getInputs();
1969 
1970   return ToolForJob;
1971 }
1972 
1973 InputInfo Driver::BuildJobsForAction(
1974     Compilation &C, const Action *A, const ToolChain *TC, const char *BoundArch,
1975     bool AtTopLevel, bool MultipleArchs, const char *LinkingOutput,
1976     std::map<std::pair<const Action *, std::string>, InputInfo> &CachedResults)
1977     const {
1978   // The bound arch is not necessarily represented in the toolchain's triple --
1979   // for example, armv7 and armv7s both map to the same triple -- so we need
1980   // both in our map.
1981   std::string TriplePlusArch = TC->getTriple().normalize();
1982   if (BoundArch) {
1983     TriplePlusArch += "-";
1984     TriplePlusArch += BoundArch;
1985   }
1986   std::pair<const Action *, std::string> ActionTC = {A, TriplePlusArch};
1987   auto CachedResult = CachedResults.find(ActionTC);
1988   if (CachedResult != CachedResults.end()) {
1989     return CachedResult->second;
1990   }
1991   InputInfo Result =
1992       BuildJobsForActionNoCache(C, A, TC, BoundArch, AtTopLevel, MultipleArchs,
1993                                 LinkingOutput, CachedResults);
1994   CachedResults[ActionTC] = Result;
1995   return Result;
1996 }
1997 
1998 InputInfo Driver::BuildJobsForActionNoCache(
1999     Compilation &C, const Action *A, const ToolChain *TC, const char *BoundArch,
2000     bool AtTopLevel, bool MultipleArchs, const char *LinkingOutput,
2001     std::map<std::pair<const Action *, std::string>, InputInfo> &CachedResults)
2002     const {
2003   llvm::PrettyStackTraceString CrashInfo("Building compilation jobs");
2004 
2005   InputInfoList CudaDeviceInputInfos;
2006   if (const CudaHostAction *CHA = dyn_cast<CudaHostAction>(A)) {
2007     // Append outputs of device jobs to the input list.
2008     for (const Action *DA : CHA->getDeviceActions()) {
2009       CudaDeviceInputInfos.push_back(BuildJobsForAction(
2010           C, DA, TC, nullptr, AtTopLevel,
2011           /*MultipleArchs*/ false, LinkingOutput, CachedResults));
2012     }
2013     // Override current action with a real host compile action and continue
2014     // processing it.
2015     A = *CHA->input_begin();
2016   }
2017 
2018   if (const InputAction *IA = dyn_cast<InputAction>(A)) {
2019     // FIXME: It would be nice to not claim this here; maybe the old scheme of
2020     // just using Args was better?
2021     const Arg &Input = IA->getInputArg();
2022     Input.claim();
2023     if (Input.getOption().matches(options::OPT_INPUT)) {
2024       const char *Name = Input.getValue();
2025       return InputInfo(A, Name, /* BaseInput = */ Name);
2026     }
2027     return InputInfo(A, &Input, /* BaseInput = */ "");
2028   }
2029 
2030   if (const BindArchAction *BAA = dyn_cast<BindArchAction>(A)) {
2031     const ToolChain *TC;
2032     const char *ArchName = BAA->getArchName();
2033 
2034     if (ArchName)
2035       TC = &getToolChain(C.getArgs(),
2036                          computeTargetTriple(*this, DefaultTargetTriple,
2037                                              C.getArgs(), ArchName));
2038     else
2039       TC = &C.getDefaultToolChain();
2040 
2041     return BuildJobsForAction(C, *BAA->input_begin(), TC, ArchName, AtTopLevel,
2042                               MultipleArchs, LinkingOutput, CachedResults);
2043   }
2044 
2045   if (const CudaDeviceAction *CDA = dyn_cast<CudaDeviceAction>(A)) {
2046     // Initial processing of CudaDeviceAction carries host params.
2047     // Call BuildJobsForAction() again, now with correct device parameters.
2048     InputInfo II = BuildJobsForAction(
2049         C, *CDA->input_begin(), C.getSingleOffloadToolChain<Action::OFK_Cuda>(),
2050         CDA->getGpuArchName(), CDA->isAtTopLevel(), /*MultipleArchs=*/true,
2051         LinkingOutput, CachedResults);
2052     // Currently II's Action is *CDA->input_begin().  Set it to CDA instead, so
2053     // that one can retrieve II's GPU arch.
2054     II.setAction(A);
2055     return II;
2056   }
2057 
2058   const ActionList *Inputs = &A->getInputs();
2059 
2060   const JobAction *JA = cast<JobAction>(A);
2061   const CudaHostAction *CollapsedCHA = nullptr;
2062   const Tool *T =
2063       selectToolForJob(C, isSaveTempsEnabled(), embedBitcodeEnabled(), TC, JA,
2064                        Inputs, CollapsedCHA);
2065   if (!T)
2066     return InputInfo();
2067 
2068   // If we've collapsed action list that contained CudaHostAction we
2069   // need to build jobs for device-side inputs it may have held.
2070   if (CollapsedCHA) {
2071     for (const Action *DA : CollapsedCHA->getDeviceActions()) {
2072       CudaDeviceInputInfos.push_back(BuildJobsForAction(
2073           C, DA, TC, "", AtTopLevel,
2074           /*MultipleArchs*/ false, LinkingOutput, CachedResults));
2075     }
2076   }
2077 
2078   // Only use pipes when there is exactly one input.
2079   InputInfoList InputInfos;
2080   for (const Action *Input : *Inputs) {
2081     // Treat dsymutil and verify sub-jobs as being at the top-level too, they
2082     // shouldn't get temporary output names.
2083     // FIXME: Clean this up.
2084     bool SubJobAtTopLevel =
2085         AtTopLevel && (isa<DsymutilJobAction>(A) || isa<VerifyJobAction>(A));
2086     InputInfos.push_back(BuildJobsForAction(C, Input, TC, BoundArch,
2087                                             SubJobAtTopLevel, MultipleArchs,
2088                                             LinkingOutput, CachedResults));
2089   }
2090 
2091   // Always use the first input as the base input.
2092   const char *BaseInput = InputInfos[0].getBaseInput();
2093 
2094   // ... except dsymutil actions, which use their actual input as the base
2095   // input.
2096   if (JA->getType() == types::TY_dSYM)
2097     BaseInput = InputInfos[0].getFilename();
2098 
2099   // Append outputs of cuda device jobs to the input list
2100   if (CudaDeviceInputInfos.size())
2101     InputInfos.append(CudaDeviceInputInfos.begin(), CudaDeviceInputInfos.end());
2102 
2103   // Determine the place to write output to, if any.
2104   InputInfo Result;
2105   if (JA->getType() == types::TY_Nothing)
2106     Result = InputInfo(A, BaseInput);
2107   else
2108     Result = InputInfo(A, GetNamedOutputPath(C, *JA, BaseInput, BoundArch,
2109                                              AtTopLevel, MultipleArchs),
2110                        BaseInput);
2111 
2112   if (CCCPrintBindings && !CCGenDiagnostics) {
2113     llvm::errs() << "# \"" << T->getToolChain().getTripleString() << '"'
2114                  << " - \"" << T->getName() << "\", inputs: [";
2115     for (unsigned i = 0, e = InputInfos.size(); i != e; ++i) {
2116       llvm::errs() << InputInfos[i].getAsString();
2117       if (i + 1 != e)
2118         llvm::errs() << ", ";
2119     }
2120     llvm::errs() << "], output: " << Result.getAsString() << "\n";
2121   } else {
2122     T->ConstructJob(C, *JA, Result, InputInfos,
2123                     C.getArgsForToolChain(TC, BoundArch), LinkingOutput);
2124   }
2125   return Result;
2126 }
2127 
2128 const char *Driver::getDefaultImageName() const {
2129   llvm::Triple Target(llvm::Triple::normalize(DefaultTargetTriple));
2130   return Target.isOSWindows() ? "a.exe" : "a.out";
2131 }
2132 
2133 /// \brief Create output filename based on ArgValue, which could either be a
2134 /// full filename, filename without extension, or a directory. If ArgValue
2135 /// does not provide a filename, then use BaseName, and use the extension
2136 /// suitable for FileType.
2137 static const char *MakeCLOutputFilename(const ArgList &Args, StringRef ArgValue,
2138                                         StringRef BaseName,
2139                                         types::ID FileType) {
2140   SmallString<128> Filename = ArgValue;
2141 
2142   if (ArgValue.empty()) {
2143     // If the argument is empty, output to BaseName in the current dir.
2144     Filename = BaseName;
2145   } else if (llvm::sys::path::is_separator(Filename.back())) {
2146     // If the argument is a directory, output to BaseName in that dir.
2147     llvm::sys::path::append(Filename, BaseName);
2148   }
2149 
2150   if (!llvm::sys::path::has_extension(ArgValue)) {
2151     // If the argument didn't provide an extension, then set it.
2152     const char *Extension = types::getTypeTempSuffix(FileType, true);
2153 
2154     if (FileType == types::TY_Image &&
2155         Args.hasArg(options::OPT__SLASH_LD, options::OPT__SLASH_LDd)) {
2156       // The output file is a dll.
2157       Extension = "dll";
2158     }
2159 
2160     llvm::sys::path::replace_extension(Filename, Extension);
2161   }
2162 
2163   return Args.MakeArgString(Filename.c_str());
2164 }
2165 
2166 const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA,
2167                                        const char *BaseInput,
2168                                        const char *BoundArch, bool AtTopLevel,
2169                                        bool MultipleArchs) const {
2170   llvm::PrettyStackTraceString CrashInfo("Computing output path");
2171   // Output to a user requested destination?
2172   if (AtTopLevel && !isa<DsymutilJobAction>(JA) && !isa<VerifyJobAction>(JA)) {
2173     if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o))
2174       return C.addResultFile(FinalOutput->getValue(), &JA);
2175   }
2176 
2177   // For /P, preprocess to file named after BaseInput.
2178   if (C.getArgs().hasArg(options::OPT__SLASH_P)) {
2179     assert(AtTopLevel && isa<PreprocessJobAction>(JA));
2180     StringRef BaseName = llvm::sys::path::filename(BaseInput);
2181     StringRef NameArg;
2182     if (Arg *A = C.getArgs().getLastArg(options::OPT__SLASH_Fi))
2183       NameArg = A->getValue();
2184     return C.addResultFile(
2185         MakeCLOutputFilename(C.getArgs(), NameArg, BaseName, types::TY_PP_C),
2186         &JA);
2187   }
2188 
2189   // Default to writing to stdout?
2190   if (AtTopLevel && !CCGenDiagnostics &&
2191       (isa<PreprocessJobAction>(JA) || JA.getType() == types::TY_ModuleFile))
2192     return "-";
2193 
2194   // Is this the assembly listing for /FA?
2195   if (JA.getType() == types::TY_PP_Asm &&
2196       (C.getArgs().hasArg(options::OPT__SLASH_FA) ||
2197        C.getArgs().hasArg(options::OPT__SLASH_Fa))) {
2198     // Use /Fa and the input filename to determine the asm file name.
2199     StringRef BaseName = llvm::sys::path::filename(BaseInput);
2200     StringRef FaValue = C.getArgs().getLastArgValue(options::OPT__SLASH_Fa);
2201     return C.addResultFile(
2202         MakeCLOutputFilename(C.getArgs(), FaValue, BaseName, JA.getType()),
2203         &JA);
2204   }
2205 
2206   // Output to a temporary file?
2207   if ((!AtTopLevel && !isSaveTempsEnabled() &&
2208        !C.getArgs().hasArg(options::OPT__SLASH_Fo)) ||
2209       CCGenDiagnostics) {
2210     StringRef Name = llvm::sys::path::filename(BaseInput);
2211     std::pair<StringRef, StringRef> Split = Name.split('.');
2212     std::string TmpName = GetTemporaryPath(
2213         Split.first, types::getTypeTempSuffix(JA.getType(), IsCLMode()));
2214     return C.addTempFile(C.getArgs().MakeArgString(TmpName.c_str()));
2215   }
2216 
2217   SmallString<128> BasePath(BaseInput);
2218   StringRef BaseName;
2219 
2220   // Dsymutil actions should use the full path.
2221   if (isa<DsymutilJobAction>(JA) || isa<VerifyJobAction>(JA))
2222     BaseName = BasePath;
2223   else
2224     BaseName = llvm::sys::path::filename(BasePath);
2225 
2226   // Determine what the derived output name should be.
2227   const char *NamedOutput;
2228 
2229   if (JA.getType() == types::TY_Object &&
2230       C.getArgs().hasArg(options::OPT__SLASH_Fo, options::OPT__SLASH_o)) {
2231     // The /Fo or /o flag decides the object filename.
2232     StringRef Val =
2233         C.getArgs()
2234             .getLastArg(options::OPT__SLASH_Fo, options::OPT__SLASH_o)
2235             ->getValue();
2236     NamedOutput =
2237         MakeCLOutputFilename(C.getArgs(), Val, BaseName, types::TY_Object);
2238   } else if (JA.getType() == types::TY_Image &&
2239              C.getArgs().hasArg(options::OPT__SLASH_Fe,
2240                                 options::OPT__SLASH_o)) {
2241     // The /Fe or /o flag names the linked file.
2242     StringRef Val =
2243         C.getArgs()
2244             .getLastArg(options::OPT__SLASH_Fe, options::OPT__SLASH_o)
2245             ->getValue();
2246     NamedOutput =
2247         MakeCLOutputFilename(C.getArgs(), Val, BaseName, types::TY_Image);
2248   } else if (JA.getType() == types::TY_Image) {
2249     if (IsCLMode()) {
2250       // clang-cl uses BaseName for the executable name.
2251       NamedOutput =
2252           MakeCLOutputFilename(C.getArgs(), "", BaseName, types::TY_Image);
2253     } else if (MultipleArchs && BoundArch) {
2254       SmallString<128> Output(getDefaultImageName());
2255       Output += "-";
2256       Output.append(BoundArch);
2257       NamedOutput = C.getArgs().MakeArgString(Output.c_str());
2258     } else {
2259       NamedOutput = getDefaultImageName();
2260     }
2261   } else if (JA.getType() == types::TY_PCH && IsCLMode()) {
2262     NamedOutput = C.getArgs().MakeArgString(GetClPchPath(C, BaseName).c_str());
2263   } else {
2264     const char *Suffix = types::getTypeTempSuffix(JA.getType(), IsCLMode());
2265     assert(Suffix && "All types used for output should have a suffix.");
2266 
2267     std::string::size_type End = std::string::npos;
2268     if (!types::appendSuffixForType(JA.getType()))
2269       End = BaseName.rfind('.');
2270     SmallString<128> Suffixed(BaseName.substr(0, End));
2271     if (MultipleArchs && BoundArch) {
2272       Suffixed += "-";
2273       Suffixed.append(BoundArch);
2274     }
2275     // When using both -save-temps and -emit-llvm, use a ".tmp.bc" suffix for
2276     // the unoptimized bitcode so that it does not get overwritten by the ".bc"
2277     // optimized bitcode output.
2278     if (!AtTopLevel && C.getArgs().hasArg(options::OPT_emit_llvm) &&
2279         JA.getType() == types::TY_LLVM_BC)
2280       Suffixed += ".tmp";
2281     Suffixed += '.';
2282     Suffixed += Suffix;
2283     NamedOutput = C.getArgs().MakeArgString(Suffixed.c_str());
2284   }
2285 
2286   // Prepend object file path if -save-temps=obj
2287   if (!AtTopLevel && isSaveTempsObj() && C.getArgs().hasArg(options::OPT_o) &&
2288       JA.getType() != types::TY_PCH) {
2289     Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o);
2290     SmallString<128> TempPath(FinalOutput->getValue());
2291     llvm::sys::path::remove_filename(TempPath);
2292     StringRef OutputFileName = llvm::sys::path::filename(NamedOutput);
2293     llvm::sys::path::append(TempPath, OutputFileName);
2294     NamedOutput = C.getArgs().MakeArgString(TempPath.c_str());
2295   }
2296 
2297   // If we're saving temps and the temp file conflicts with the input file,
2298   // then avoid overwriting input file.
2299   if (!AtTopLevel && isSaveTempsEnabled() && NamedOutput == BaseName) {
2300     bool SameFile = false;
2301     SmallString<256> Result;
2302     llvm::sys::fs::current_path(Result);
2303     llvm::sys::path::append(Result, BaseName);
2304     llvm::sys::fs::equivalent(BaseInput, Result.c_str(), SameFile);
2305     // Must share the same path to conflict.
2306     if (SameFile) {
2307       StringRef Name = llvm::sys::path::filename(BaseInput);
2308       std::pair<StringRef, StringRef> Split = Name.split('.');
2309       std::string TmpName = GetTemporaryPath(
2310           Split.first, types::getTypeTempSuffix(JA.getType(), IsCLMode()));
2311       return C.addTempFile(C.getArgs().MakeArgString(TmpName.c_str()));
2312     }
2313   }
2314 
2315   // As an annoying special case, PCH generation doesn't strip the pathname.
2316   if (JA.getType() == types::TY_PCH && !IsCLMode()) {
2317     llvm::sys::path::remove_filename(BasePath);
2318     if (BasePath.empty())
2319       BasePath = NamedOutput;
2320     else
2321       llvm::sys::path::append(BasePath, NamedOutput);
2322     return C.addResultFile(C.getArgs().MakeArgString(BasePath.c_str()), &JA);
2323   } else {
2324     return C.addResultFile(NamedOutput, &JA);
2325   }
2326 }
2327 
2328 std::string Driver::GetFilePath(const char *Name, const ToolChain &TC) const {
2329   // Respect a limited subset of the '-Bprefix' functionality in GCC by
2330   // attempting to use this prefix when looking for file paths.
2331   for (const std::string &Dir : PrefixDirs) {
2332     if (Dir.empty())
2333       continue;
2334     SmallString<128> P(Dir[0] == '=' ? SysRoot + Dir.substr(1) : Dir);
2335     llvm::sys::path::append(P, Name);
2336     if (llvm::sys::fs::exists(Twine(P)))
2337       return P.str();
2338   }
2339 
2340   SmallString<128> P(ResourceDir);
2341   llvm::sys::path::append(P, Name);
2342   if (llvm::sys::fs::exists(Twine(P)))
2343     return P.str();
2344 
2345   for (const std::string &Dir : TC.getFilePaths()) {
2346     if (Dir.empty())
2347       continue;
2348     SmallString<128> P(Dir[0] == '=' ? SysRoot + Dir.substr(1) : Dir);
2349     llvm::sys::path::append(P, Name);
2350     if (llvm::sys::fs::exists(Twine(P)))
2351       return P.str();
2352   }
2353 
2354   return Name;
2355 }
2356 
2357 void Driver::generatePrefixedToolNames(
2358     const char *Tool, const ToolChain &TC,
2359     SmallVectorImpl<std::string> &Names) const {
2360   // FIXME: Needs a better variable than DefaultTargetTriple
2361   Names.emplace_back(DefaultTargetTriple + "-" + Tool);
2362   Names.emplace_back(Tool);
2363 
2364   // Allow the discovery of tools prefixed with LLVM's default target triple.
2365   std::string LLVMDefaultTargetTriple = llvm::sys::getDefaultTargetTriple();
2366   if (LLVMDefaultTargetTriple != DefaultTargetTriple)
2367     Names.emplace_back(LLVMDefaultTargetTriple + "-" + Tool);
2368 }
2369 
2370 static bool ScanDirForExecutable(SmallString<128> &Dir,
2371                                  ArrayRef<std::string> Names) {
2372   for (const auto &Name : Names) {
2373     llvm::sys::path::append(Dir, Name);
2374     if (llvm::sys::fs::can_execute(Twine(Dir)))
2375       return true;
2376     llvm::sys::path::remove_filename(Dir);
2377   }
2378   return false;
2379 }
2380 
2381 std::string Driver::GetProgramPath(const char *Name,
2382                                    const ToolChain &TC) const {
2383   SmallVector<std::string, 2> TargetSpecificExecutables;
2384   generatePrefixedToolNames(Name, TC, TargetSpecificExecutables);
2385 
2386   // Respect a limited subset of the '-Bprefix' functionality in GCC by
2387   // attempting to use this prefix when looking for program paths.
2388   for (const auto &PrefixDir : PrefixDirs) {
2389     if (llvm::sys::fs::is_directory(PrefixDir)) {
2390       SmallString<128> P(PrefixDir);
2391       if (ScanDirForExecutable(P, TargetSpecificExecutables))
2392         return P.str();
2393     } else {
2394       SmallString<128> P(PrefixDir + Name);
2395       if (llvm::sys::fs::can_execute(Twine(P)))
2396         return P.str();
2397     }
2398   }
2399 
2400   const ToolChain::path_list &List = TC.getProgramPaths();
2401   for (const auto &Path : List) {
2402     SmallString<128> P(Path);
2403     if (ScanDirForExecutable(P, TargetSpecificExecutables))
2404       return P.str();
2405   }
2406 
2407   // If all else failed, search the path.
2408   for (const auto &TargetSpecificExecutable : TargetSpecificExecutables)
2409     if (llvm::ErrorOr<std::string> P =
2410             llvm::sys::findProgramByName(TargetSpecificExecutable))
2411       return *P;
2412 
2413   return Name;
2414 }
2415 
2416 std::string Driver::GetTemporaryPath(StringRef Prefix,
2417                                      const char *Suffix) const {
2418   SmallString<128> Path;
2419   std::error_code EC = llvm::sys::fs::createTemporaryFile(Prefix, Suffix, Path);
2420   if (EC) {
2421     Diag(clang::diag::err_unable_to_make_temp) << EC.message();
2422     return "";
2423   }
2424 
2425   return Path.str();
2426 }
2427 
2428 std::string Driver::GetClPchPath(Compilation &C, StringRef BaseName) const {
2429   SmallString<128> Output;
2430   if (Arg *FpArg = C.getArgs().getLastArg(options::OPT__SLASH_Fp)) {
2431     // FIXME: If anybody needs it, implement this obscure rule:
2432     // "If you specify a directory without a file name, the default file name
2433     // is VCx0.pch., where x is the major version of Visual C++ in use."
2434     Output = FpArg->getValue();
2435 
2436     // "If you do not specify an extension as part of the path name, an
2437     // extension of .pch is assumed. "
2438     if (!llvm::sys::path::has_extension(Output))
2439       Output += ".pch";
2440   } else {
2441     Output = BaseName;
2442     llvm::sys::path::replace_extension(Output, ".pch");
2443   }
2444   return Output.str();
2445 }
2446 
2447 const ToolChain &Driver::getToolChain(const ArgList &Args,
2448                                       const llvm::Triple &Target) const {
2449 
2450   ToolChain *&TC = ToolChains[Target.str()];
2451   if (!TC) {
2452     switch (Target.getOS()) {
2453     case llvm::Triple::Haiku:
2454       TC = new toolchains::Haiku(*this, Target, Args);
2455       break;
2456     case llvm::Triple::CloudABI:
2457       TC = new toolchains::CloudABI(*this, Target, Args);
2458       break;
2459     case llvm::Triple::Darwin:
2460     case llvm::Triple::MacOSX:
2461     case llvm::Triple::IOS:
2462     case llvm::Triple::TvOS:
2463     case llvm::Triple::WatchOS:
2464       TC = new toolchains::DarwinClang(*this, Target, Args);
2465       break;
2466     case llvm::Triple::DragonFly:
2467       TC = new toolchains::DragonFly(*this, Target, Args);
2468       break;
2469     case llvm::Triple::OpenBSD:
2470       TC = new toolchains::OpenBSD(*this, Target, Args);
2471       break;
2472     case llvm::Triple::Bitrig:
2473       TC = new toolchains::Bitrig(*this, Target, Args);
2474       break;
2475     case llvm::Triple::NetBSD:
2476       TC = new toolchains::NetBSD(*this, Target, Args);
2477       break;
2478     case llvm::Triple::FreeBSD:
2479       TC = new toolchains::FreeBSD(*this, Target, Args);
2480       break;
2481     case llvm::Triple::Minix:
2482       TC = new toolchains::Minix(*this, Target, Args);
2483       break;
2484     case llvm::Triple::Linux:
2485     case llvm::Triple::ELFIAMCU:
2486       if (Target.getArch() == llvm::Triple::hexagon)
2487         TC = new toolchains::HexagonToolChain(*this, Target, Args);
2488       else if ((Target.getVendor() == llvm::Triple::MipsTechnologies) &&
2489                !Target.hasEnvironment())
2490         TC = new toolchains::MipsLLVMToolChain(*this, Target, Args);
2491       else
2492         TC = new toolchains::Linux(*this, Target, Args);
2493       break;
2494     case llvm::Triple::NaCl:
2495       TC = new toolchains::NaClToolChain(*this, Target, Args);
2496       break;
2497     case llvm::Triple::Solaris:
2498       TC = new toolchains::Solaris(*this, Target, Args);
2499       break;
2500     case llvm::Triple::AMDHSA:
2501       TC = new toolchains::AMDGPUToolChain(*this, Target, Args);
2502       break;
2503     case llvm::Triple::Win32:
2504       switch (Target.getEnvironment()) {
2505       default:
2506         if (Target.isOSBinFormatELF())
2507           TC = new toolchains::Generic_ELF(*this, Target, Args);
2508         else if (Target.isOSBinFormatMachO())
2509           TC = new toolchains::MachO(*this, Target, Args);
2510         else
2511           TC = new toolchains::Generic_GCC(*this, Target, Args);
2512         break;
2513       case llvm::Triple::GNU:
2514         TC = new toolchains::MinGW(*this, Target, Args);
2515         break;
2516       case llvm::Triple::Itanium:
2517         TC = new toolchains::CrossWindowsToolChain(*this, Target, Args);
2518         break;
2519       case llvm::Triple::MSVC:
2520       case llvm::Triple::UnknownEnvironment:
2521         TC = new toolchains::MSVCToolChain(*this, Target, Args);
2522         break;
2523       }
2524       break;
2525     case llvm::Triple::CUDA:
2526       TC = new toolchains::CudaToolChain(*this, Target, Args);
2527       break;
2528     case llvm::Triple::PS4:
2529       TC = new toolchains::PS4CPU(*this, Target, Args);
2530       break;
2531     default:
2532       // Of these targets, Hexagon is the only one that might have
2533       // an OS of Linux, in which case it got handled above already.
2534       switch (Target.getArch()) {
2535       case llvm::Triple::tce:
2536         TC = new toolchains::TCEToolChain(*this, Target, Args);
2537         break;
2538       case llvm::Triple::hexagon:
2539         TC = new toolchains::HexagonToolChain(*this, Target, Args);
2540         break;
2541       case llvm::Triple::lanai:
2542         TC = new toolchains::LanaiToolChain(*this, Target, Args);
2543         break;
2544       case llvm::Triple::xcore:
2545         TC = new toolchains::XCoreToolChain(*this, Target, Args);
2546         break;
2547       case llvm::Triple::wasm32:
2548       case llvm::Triple::wasm64:
2549         TC = new toolchains::WebAssembly(*this, Target, Args);
2550         break;
2551       default:
2552         if (Target.getVendor() == llvm::Triple::Myriad)
2553           TC = new toolchains::MyriadToolChain(*this, Target, Args);
2554         else if (Target.isOSBinFormatELF())
2555           TC = new toolchains::Generic_ELF(*this, Target, Args);
2556         else if (Target.isOSBinFormatMachO())
2557           TC = new toolchains::MachO(*this, Target, Args);
2558         else
2559           TC = new toolchains::Generic_GCC(*this, Target, Args);
2560       }
2561     }
2562   }
2563   return *TC;
2564 }
2565 
2566 bool Driver::ShouldUseClangCompiler(const JobAction &JA) const {
2567   // Say "no" if there is not exactly one input of a type clang understands.
2568   if (JA.size() != 1 ||
2569       !types::isAcceptedByClang((*JA.input_begin())->getType()))
2570     return false;
2571 
2572   // And say "no" if this is not a kind of action clang understands.
2573   if (!isa<PreprocessJobAction>(JA) && !isa<PrecompileJobAction>(JA) &&
2574       !isa<CompileJobAction>(JA) && !isa<BackendJobAction>(JA))
2575     return false;
2576 
2577   return true;
2578 }
2579 
2580 /// GetReleaseVersion - Parse (([0-9]+)(.([0-9]+)(.([0-9]+)?))?)? and return the
2581 /// grouped values as integers. Numbers which are not provided are set to 0.
2582 ///
2583 /// \return True if the entire string was parsed (9.2), or all groups were
2584 /// parsed (10.3.5extrastuff).
2585 bool Driver::GetReleaseVersion(const char *Str, unsigned &Major,
2586                                unsigned &Minor, unsigned &Micro,
2587                                bool &HadExtra) {
2588   HadExtra = false;
2589 
2590   Major = Minor = Micro = 0;
2591   if (*Str == '\0')
2592     return false;
2593 
2594   char *End;
2595   Major = (unsigned)strtol(Str, &End, 10);
2596   if (*Str != '\0' && *End == '\0')
2597     return true;
2598   if (*End != '.')
2599     return false;
2600 
2601   Str = End + 1;
2602   Minor = (unsigned)strtol(Str, &End, 10);
2603   if (*Str != '\0' && *End == '\0')
2604     return true;
2605   if (*End != '.')
2606     return false;
2607 
2608   Str = End + 1;
2609   Micro = (unsigned)strtol(Str, &End, 10);
2610   if (*Str != '\0' && *End == '\0')
2611     return true;
2612   if (Str == End)
2613     return false;
2614   HadExtra = true;
2615   return true;
2616 }
2617 
2618 /// Parse digits from a string \p Str and fulfill \p Digits with
2619 /// the parsed numbers. This method assumes that the max number of
2620 /// digits to look for is equal to Digits.size().
2621 ///
2622 /// \return True if the entire string was parsed and there are
2623 /// no extra characters remaining at the end.
2624 bool Driver::GetReleaseVersion(const char *Str,
2625                                MutableArrayRef<unsigned> Digits) {
2626   if (*Str == '\0')
2627     return false;
2628 
2629   char *End;
2630   unsigned CurDigit = 0;
2631   while (CurDigit < Digits.size()) {
2632     unsigned Digit = (unsigned)strtol(Str, &End, 10);
2633     Digits[CurDigit] = Digit;
2634     if (*Str != '\0' && *End == '\0')
2635       return true;
2636     if (*End != '.' || Str == End)
2637       return false;
2638     Str = End + 1;
2639     CurDigit++;
2640   }
2641 
2642   // More digits than requested, bail out...
2643   return false;
2644 }
2645 
2646 std::pair<unsigned, unsigned> Driver::getIncludeExcludeOptionFlagMasks() const {
2647   unsigned IncludedFlagsBitmask = 0;
2648   unsigned ExcludedFlagsBitmask = options::NoDriverOption;
2649 
2650   if (Mode == CLMode) {
2651     // Include CL and Core options.
2652     IncludedFlagsBitmask |= options::CLOption;
2653     IncludedFlagsBitmask |= options::CoreOption;
2654   } else {
2655     ExcludedFlagsBitmask |= options::CLOption;
2656   }
2657 
2658   return std::make_pair(IncludedFlagsBitmask, ExcludedFlagsBitmask);
2659 }
2660 
2661 bool clang::driver::isOptimizationLevelFast(const ArgList &Args) {
2662   return Args.hasFlag(options::OPT_Ofast, options::OPT_O_Group, false);
2663 }
2664