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 
12 #include "clang/Driver/Action.h"
13 #include "clang/Driver/Arg.h"
14 #include "clang/Driver/ArgList.h"
15 #include "clang/Driver/Compilation.h"
16 #include "clang/Driver/DriverDiagnostic.h"
17 #include "clang/Driver/Job.h"
18 #include "clang/Driver/OptTable.h"
19 #include "clang/Driver/Option.h"
20 #include "clang/Driver/Options.h"
21 #include "clang/Driver/Tool.h"
22 #include "clang/Driver/ToolChain.h"
23 
24 #include "clang/Basic/Version.h"
25 
26 #include "llvm/ADT/ArrayRef.h"
27 #include "llvm/ADT/StringSet.h"
28 #include "llvm/ADT/OwningPtr.h"
29 #include "llvm/Support/ErrorHandling.h"
30 #include "llvm/Support/PrettyStackTrace.h"
31 #include "llvm/Support/raw_ostream.h"
32 #include "llvm/Support/FileSystem.h"
33 #include "llvm/Support/Path.h"
34 #include "llvm/Support/Program.h"
35 
36 #include "InputInfo.h"
37 #include "ToolChains.h"
38 
39 #include <map>
40 
41 #include "clang/Config/config.h"
42 
43 using namespace clang::driver;
44 using namespace clang;
45 
46 Driver::Driver(StringRef ClangExecutable,
47                StringRef DefaultTargetTriple,
48                StringRef DefaultImageName,
49                bool IsProduction,
50                DiagnosticsEngine &Diags)
51   : Opts(createDriverOptTable()), Diags(Diags),
52     ClangExecutable(ClangExecutable), SysRoot(DEFAULT_SYSROOT),
53     UseStdLib(true), DefaultTargetTriple(DefaultTargetTriple),
54     DefaultImageName(DefaultImageName),
55     DriverTitle("clang \"gcc-compatible\" driver"),
56     CCPrintOptionsFilename(0), CCPrintHeadersFilename(0),
57     CCLogDiagnosticsFilename(0), CCCIsCXX(false),
58     CCCIsCPP(false),CCCEcho(false), CCCPrintBindings(false),
59     CCPrintOptions(false), CCPrintHeaders(false), CCLogDiagnostics(false),
60     CCGenDiagnostics(false), CCCGenericGCCName(""), CheckInputsExist(true),
61     CCCUseClang(true), CCCUseClangCXX(true), CCCUseClangCPP(true),
62     ForcedClangUse(false), CCCUsePCH(true), SuppressMissingInputWarning(false) {
63   if (IsProduction) {
64     // In a "production" build, only use clang on architectures we expect to
65     // work.
66     //
67     // During development its more convenient to always have the driver use
68     // clang, but we don't want users to be confused when things don't work, or
69     // to file bugs for things we don't support.
70     CCCClangArchs.insert(llvm::Triple::x86);
71     CCCClangArchs.insert(llvm::Triple::x86_64);
72     CCCClangArchs.insert(llvm::Triple::arm);
73   }
74 
75   Name = llvm::sys::path::stem(ClangExecutable);
76   Dir  = llvm::sys::path::parent_path(ClangExecutable);
77 
78   // Compute the path to the resource directory.
79   StringRef ClangResourceDir(CLANG_RESOURCE_DIR);
80   SmallString<128> P(Dir);
81   if (ClangResourceDir != "")
82     llvm::sys::path::append(P, ClangResourceDir);
83   else
84     llvm::sys::path::append(P, "..", "lib", "clang", CLANG_VERSION_STRING);
85   ResourceDir = P.str();
86 }
87 
88 Driver::~Driver() {
89   delete Opts;
90 
91   for (llvm::StringMap<ToolChain *>::iterator I = ToolChains.begin(),
92                                               E = ToolChains.end();
93        I != E; ++I)
94     delete I->second;
95 }
96 
97 InputArgList *Driver::ParseArgStrings(ArrayRef<const char *> ArgList) {
98   llvm::PrettyStackTraceString CrashInfo("Command line argument parsing");
99   unsigned MissingArgIndex, MissingArgCount;
100   InputArgList *Args = getOpts().ParseArgs(ArgList.begin(), ArgList.end(),
101                                            MissingArgIndex, MissingArgCount);
102 
103   // Check for missing argument error.
104   if (MissingArgCount)
105     Diag(clang::diag::err_drv_missing_argument)
106       << Args->getArgString(MissingArgIndex) << MissingArgCount;
107 
108   // Check for unsupported options.
109   for (ArgList::const_iterator it = Args->begin(), ie = Args->end();
110        it != ie; ++it) {
111     Arg *A = *it;
112     if (A->getOption().isUnsupported()) {
113       Diag(clang::diag::err_drv_unsupported_opt) << A->getAsString(*Args);
114       continue;
115     }
116 
117     // Warn about -mcpu= without an argument.
118     if (A->getOption().matches(options::OPT_mcpu_EQ) &&
119         A->containsValue("")) {
120       Diag(clang::diag::warn_drv_empty_joined_argument) << A->getAsString(*Args);
121     }
122   }
123 
124   return Args;
125 }
126 
127 // Determine which compilation mode we are in. We look for options which
128 // affect the phase, starting with the earliest phases, and record which
129 // option we used to determine the final phase.
130 phases::ID Driver::getFinalPhase(const DerivedArgList &DAL, Arg **FinalPhaseArg)
131 const {
132   Arg *PhaseArg = 0;
133   phases::ID FinalPhase;
134 
135   // -{E,M,MM} only run the preprocessor.
136   if (CCCIsCPP ||
137       (PhaseArg = DAL.getLastArg(options::OPT_E)) ||
138       (PhaseArg = DAL.getLastArg(options::OPT_M, options::OPT_MM))) {
139     FinalPhase = phases::Preprocess;
140 
141     // -{fsyntax-only,-analyze,emit-ast,S} only run up to the compiler.
142   } else if ((PhaseArg = DAL.getLastArg(options::OPT_fsyntax_only)) ||
143              (PhaseArg = DAL.getLastArg(options::OPT_rewrite_objc)) ||
144              (PhaseArg = DAL.getLastArg(options::OPT_rewrite_legacy_objc)) ||
145              (PhaseArg = DAL.getLastArg(options::OPT__migrate)) ||
146              (PhaseArg = DAL.getLastArg(options::OPT__analyze,
147                                         options::OPT__analyze_auto)) ||
148              (PhaseArg = DAL.getLastArg(options::OPT_emit_ast)) ||
149              (PhaseArg = DAL.getLastArg(options::OPT_S))) {
150     FinalPhase = phases::Compile;
151 
152     // -c only runs up to the assembler.
153   } else if ((PhaseArg = DAL.getLastArg(options::OPT_c))) {
154     FinalPhase = phases::Assemble;
155 
156     // Otherwise do everything.
157   } else
158     FinalPhase = phases::Link;
159 
160   if (FinalPhaseArg)
161     *FinalPhaseArg = PhaseArg;
162 
163   return FinalPhase;
164 }
165 
166 DerivedArgList *Driver::TranslateInputArgs(const InputArgList &Args) const {
167   DerivedArgList *DAL = new DerivedArgList(Args);
168 
169   bool HasNostdlib = Args.hasArg(options::OPT_nostdlib);
170   for (ArgList::const_iterator it = Args.begin(),
171          ie = Args.end(); it != ie; ++it) {
172     const Arg *A = *it;
173 
174     // Unfortunately, we have to parse some forwarding options (-Xassembler,
175     // -Xlinker, -Xpreprocessor) because we either integrate their functionality
176     // (assembler and preprocessor), or bypass a previous driver ('collect2').
177 
178     // Rewrite linker options, to replace --no-demangle with a custom internal
179     // option.
180     if ((A->getOption().matches(options::OPT_Wl_COMMA) ||
181          A->getOption().matches(options::OPT_Xlinker)) &&
182         A->containsValue("--no-demangle")) {
183       // Add the rewritten no-demangle argument.
184       DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_Xlinker__no_demangle));
185 
186       // Add the remaining values as Xlinker arguments.
187       for (unsigned i = 0, e = A->getNumValues(); i != e; ++i)
188         if (StringRef(A->getValue(Args, i)) != "--no-demangle")
189           DAL->AddSeparateArg(A, Opts->getOption(options::OPT_Xlinker),
190                               A->getValue(Args, i));
191 
192       continue;
193     }
194 
195     // Rewrite preprocessor options, to replace -Wp,-MD,FOO which is used by
196     // some build systems. We don't try to be complete here because we don't
197     // care to encourage this usage model.
198     if (A->getOption().matches(options::OPT_Wp_COMMA) &&
199         A->getNumValues() == 2 &&
200         (A->getValue(Args, 0) == StringRef("-MD") ||
201          A->getValue(Args, 0) == StringRef("-MMD"))) {
202       // Rewrite to -MD/-MMD along with -MF.
203       if (A->getValue(Args, 0) == StringRef("-MD"))
204         DAL->AddFlagArg(A, Opts->getOption(options::OPT_MD));
205       else
206         DAL->AddFlagArg(A, Opts->getOption(options::OPT_MMD));
207       DAL->AddSeparateArg(A, Opts->getOption(options::OPT_MF),
208                           A->getValue(Args, 1));
209       continue;
210     }
211 
212     // Rewrite reserved library names.
213     if (A->getOption().matches(options::OPT_l)) {
214       StringRef Value = A->getValue(Args);
215 
216       // Rewrite unless -nostdlib is present.
217       if (!HasNostdlib && Value == "stdc++") {
218         DAL->AddFlagArg(A, Opts->getOption(
219                               options::OPT_Z_reserved_lib_stdcxx));
220         continue;
221       }
222 
223       // Rewrite unconditionally.
224       if (Value == "cc_kext") {
225         DAL->AddFlagArg(A, Opts->getOption(
226                               options::OPT_Z_reserved_lib_cckext));
227         continue;
228       }
229     }
230 
231     DAL->append(*it);
232   }
233 
234   // Add a default value of -mlinker-version=, if one was given and the user
235   // didn't specify one.
236 #if defined(HOST_LINK_VERSION)
237   if (!Args.hasArg(options::OPT_mlinker_version_EQ)) {
238     DAL->AddJoinedArg(0, Opts->getOption(options::OPT_mlinker_version_EQ),
239                       HOST_LINK_VERSION);
240     DAL->getLastArg(options::OPT_mlinker_version_EQ)->claim();
241   }
242 #endif
243 
244   return DAL;
245 }
246 
247 Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
248   llvm::PrettyStackTraceString CrashInfo("Compilation construction");
249 
250   // FIXME: Handle environment options which affect driver behavior, somewhere
251   // (client?). GCC_EXEC_PREFIX, LPATH, CC_PRINT_OPTIONS.
252 
253   if (char *env = ::getenv("COMPILER_PATH")) {
254     StringRef CompilerPath = env;
255     while (!CompilerPath.empty()) {
256       std::pair<StringRef, StringRef> Split = CompilerPath.split(':');
257       PrefixDirs.push_back(Split.first);
258       CompilerPath = Split.second;
259     }
260   }
261 
262   // FIXME: What are we going to do with -V and -b?
263 
264   // FIXME: This stuff needs to go into the Compilation, not the driver.
265   bool CCCPrintOptions = false, CCCPrintActions = false;
266 
267   InputArgList *Args = ParseArgStrings(ArgList.slice(1));
268 
269   // -no-canonical-prefixes is used very early in main.
270   Args->ClaimAllArgs(options::OPT_no_canonical_prefixes);
271 
272   // Ignore -pipe.
273   Args->ClaimAllArgs(options::OPT_pipe);
274 
275   // Extract -ccc args.
276   //
277   // FIXME: We need to figure out where this behavior should live. Most of it
278   // should be outside in the client; the parts that aren't should have proper
279   // options, either by introducing new ones or by overloading gcc ones like -V
280   // or -b.
281   CCCPrintOptions = Args->hasArg(options::OPT_ccc_print_options);
282   CCCPrintActions = Args->hasArg(options::OPT_ccc_print_phases);
283   CCCPrintBindings = Args->hasArg(options::OPT_ccc_print_bindings);
284   CCCIsCXX = Args->hasArg(options::OPT_ccc_cxx) || CCCIsCXX;
285   CCCEcho = Args->hasArg(options::OPT_ccc_echo);
286   if (const Arg *A = Args->getLastArg(options::OPT_ccc_gcc_name))
287     CCCGenericGCCName = A->getValue(*Args);
288   CCCUseClangCXX = Args->hasFlag(options::OPT_ccc_clang_cxx,
289                                  options::OPT_ccc_no_clang_cxx,
290                                  CCCUseClangCXX);
291   CCCUsePCH = Args->hasFlag(options::OPT_ccc_pch_is_pch,
292                             options::OPT_ccc_pch_is_pth);
293   CCCUseClang = !Args->hasArg(options::OPT_ccc_no_clang);
294   CCCUseClangCPP = !Args->hasArg(options::OPT_ccc_no_clang_cpp);
295   if (const Arg *A = Args->getLastArg(options::OPT_ccc_clang_archs)) {
296     StringRef Cur = A->getValue(*Args);
297 
298     CCCClangArchs.clear();
299     while (!Cur.empty()) {
300       std::pair<StringRef, StringRef> Split = Cur.split(',');
301 
302       if (!Split.first.empty()) {
303         llvm::Triple::ArchType Arch =
304           llvm::Triple(Split.first, "", "").getArch();
305 
306         if (Arch == llvm::Triple::UnknownArch)
307           Diag(clang::diag::err_drv_invalid_arch_name) << Split.first;
308 
309         CCCClangArchs.insert(Arch);
310       }
311 
312       Cur = Split.second;
313     }
314   }
315   // FIXME: DefaultTargetTriple is used by the target-prefixed calls to as/ld
316   // and getToolChain is const.
317   if (const Arg *A = Args->getLastArg(options::OPT_target))
318     DefaultTargetTriple = A->getValue(*Args);
319   if (const Arg *A = Args->getLastArg(options::OPT_ccc_install_dir))
320     Dir = InstalledDir = A->getValue(*Args);
321   for (arg_iterator it = Args->filtered_begin(options::OPT_B),
322          ie = Args->filtered_end(); it != ie; ++it) {
323     const Arg *A = *it;
324     A->claim();
325     PrefixDirs.push_back(A->getValue(*Args, 0));
326   }
327   if (const Arg *A = Args->getLastArg(options::OPT__sysroot_EQ))
328     SysRoot = A->getValue(*Args);
329   if (Args->hasArg(options::OPT_nostdlib))
330     UseStdLib = false;
331 
332   // Perform the default argument translations.
333   DerivedArgList *TranslatedArgs = TranslateInputArgs(*Args);
334 
335   // Owned by the host.
336   const ToolChain &TC = getToolChain(*Args);
337 
338   // The compilation takes ownership of Args.
339   Compilation *C = new Compilation(*this, TC, Args, TranslatedArgs);
340 
341   // FIXME: This behavior shouldn't be here.
342   if (CCCPrintOptions) {
343     PrintOptions(C->getInputArgs());
344     return C;
345   }
346 
347   if (!HandleImmediateArgs(*C))
348     return C;
349 
350   // Construct the list of inputs.
351   InputList Inputs;
352   BuildInputs(C->getDefaultToolChain(), C->getArgs(), Inputs);
353 
354   // Construct the list of abstract actions to perform for this compilation. On
355   // Darwin target OSes this uses the driver-driver and universal actions.
356   if (TC.getTriple().isOSDarwin())
357     BuildUniversalActions(C->getDefaultToolChain(), C->getArgs(),
358                           Inputs, C->getActions());
359   else
360     BuildActions(C->getDefaultToolChain(), C->getArgs(), Inputs,
361                  C->getActions());
362 
363   if (CCCPrintActions) {
364     PrintActions(*C);
365     return C;
366   }
367 
368   BuildJobs(*C);
369 
370   return C;
371 }
372 
373 // When clang crashes, produce diagnostic information including the fully
374 // preprocessed source file(s).  Request that the developer attach the
375 // diagnostic information to a bug report.
376 void Driver::generateCompilationDiagnostics(Compilation &C,
377                                             const Command *FailingCommand) {
378   if (C.getArgs().hasArg(options::OPT_fno_crash_diagnostics))
379     return;
380 
381   // Don't try to generate diagnostics for link jobs.
382   if (FailingCommand && FailingCommand->getCreator().isLinkJob())
383     return;
384 
385   // Print the version of the compiler.
386   PrintVersion(C, llvm::errs());
387 
388   Diag(clang::diag::note_drv_command_failed_diag_msg)
389     << "PLEASE submit a bug report to " BUG_REPORT_URL " and include the "
390     "crash backtrace, preprocessed source, and associated run script.";
391 
392   // Suppress driver output and emit preprocessor output to temp file.
393   CCCIsCPP = true;
394   CCGenDiagnostics = true;
395   C.getArgs().AddFlagArg(0, Opts->getOption(options::OPT_frewrite_includes));
396 
397   // Save the original job command(s).
398   std::string Cmd;
399   llvm::raw_string_ostream OS(Cmd);
400   if (FailingCommand)
401     C.PrintJob(OS, *FailingCommand, "\n", false);
402   else
403     // Crash triggered by FORCE_CLANG_DIAGNOSTICS_CRASH, which doesn't have an
404     // associated FailingCommand, so just pass all jobs.
405     C.PrintJob(OS, C.getJobs(), "\n", false);
406   OS.flush();
407 
408   // Clear stale state and suppress tool output.
409   C.initCompilationForDiagnostics();
410   Diags.Reset();
411 
412   // Construct the list of inputs.
413   InputList Inputs;
414   BuildInputs(C.getDefaultToolChain(), C.getArgs(), Inputs);
415 
416   for (InputList::iterator it = Inputs.begin(), ie = Inputs.end(); it != ie;) {
417     bool IgnoreInput = false;
418 
419     // Ignore input from stdin or any inputs that cannot be preprocessed.
420     if (!strcmp(it->second->getValue(C.getArgs()), "-")) {
421       Diag(clang::diag::note_drv_command_failed_diag_msg)
422         << "Error generating preprocessed source(s) - ignoring input from stdin"
423         ".";
424       IgnoreInput = true;
425     } else if (types::getPreprocessedType(it->first) == types::TY_INVALID) {
426       IgnoreInput = true;
427     }
428 
429     if (IgnoreInput) {
430       it = Inputs.erase(it);
431       ie = Inputs.end();
432     } else {
433       ++it;
434     }
435   }
436 
437   // Don't attempt to generate preprocessed files if multiple -arch options are
438   // used, unless they're all duplicates.
439   llvm::StringSet<> ArchNames;
440   for (ArgList::const_iterator it = C.getArgs().begin(), ie = C.getArgs().end();
441        it != ie; ++it) {
442     Arg *A = *it;
443     if (A->getOption().matches(options::OPT_arch)) {
444       StringRef ArchName = A->getValue(C.getArgs());
445       ArchNames.insert(ArchName);
446     }
447   }
448   if (ArchNames.size() > 1) {
449     Diag(clang::diag::note_drv_command_failed_diag_msg)
450       << "Error generating preprocessed source(s) - cannot generate "
451       "preprocessed source with multiple -arch options.";
452     return;
453   }
454 
455   if (Inputs.empty()) {
456     Diag(clang::diag::note_drv_command_failed_diag_msg)
457       << "Error generating preprocessed source(s) - no preprocessable inputs.";
458     return;
459   }
460 
461   // Construct the list of abstract actions to perform for this compilation. On
462   // Darwin OSes this uses the driver-driver and builds universal actions.
463   const ToolChain &TC = C.getDefaultToolChain();
464   if (TC.getTriple().isOSDarwin())
465     BuildUniversalActions(TC, C.getArgs(), Inputs, C.getActions());
466   else
467     BuildActions(TC, C.getArgs(), Inputs, C.getActions());
468 
469   BuildJobs(C);
470 
471   // If there were errors building the compilation, quit now.
472   if (Diags.hasErrorOccurred()) {
473     Diag(clang::diag::note_drv_command_failed_diag_msg)
474       << "Error generating preprocessed source(s).";
475     return;
476   }
477 
478   // Generate preprocessed output.
479   FailingCommand = 0;
480   int Res = C.ExecuteJob(C.getJobs(), FailingCommand);
481 
482   // If the command succeeded, we are done.
483   if (Res == 0) {
484     Diag(clang::diag::note_drv_command_failed_diag_msg)
485       << "\n********************\n\n"
486       "PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:\n"
487       "Preprocessed source(s) and associated run script(s) are located at:";
488     ArgStringList Files = C.getTempFiles();
489     for (ArgStringList::const_iterator it = Files.begin(), ie = Files.end();
490          it != ie; ++it) {
491       Diag(clang::diag::note_drv_command_failed_diag_msg) << *it;
492 
493       std::string Err;
494       std::string Script = StringRef(*it).rsplit('.').first;
495       Script += ".sh";
496       llvm::raw_fd_ostream ScriptOS(Script.c_str(), Err,
497                                     llvm::raw_fd_ostream::F_Excl |
498                                     llvm::raw_fd_ostream::F_Binary);
499       if (!Err.empty()) {
500         Diag(clang::diag::note_drv_command_failed_diag_msg)
501           << "Error generating run script: " + Script + " " + Err;
502       } else {
503         // Strip away options not necessary to reproduce the crash.
504         // FIXME: This doesn't work with quotes (e.g., -D "foo bar").
505         SmallVector<std::string, 16> Flag;
506         Flag.push_back("-D ");
507         Flag.push_back("-F");
508         Flag.push_back("-I ");
509         Flag.push_back("-o ");
510         Flag.push_back("-coverage-file ");
511         Flag.push_back("-dependency-file ");
512         Flag.push_back("-fdebug-compilation-dir ");
513         Flag.push_back("-fmodule-cache-path ");
514         Flag.push_back("-include ");
515         Flag.push_back("-include-pch ");
516         Flag.push_back("-isysroot ");
517         Flag.push_back("-resource-dir ");
518         Flag.push_back("-serialize-diagnostic-file ");
519         for (unsigned i = 0, e = Flag.size(); i < e; ++i) {
520           size_t I = 0, E = 0;
521           do {
522             I = Cmd.find(Flag[i], I);
523             if (I == std::string::npos) break;
524 
525             E = Cmd.find(" ", I + Flag[i].length());
526             if (E == std::string::npos) break;
527             Cmd.erase(I, E - I + 1);
528           } while(1);
529         }
530         // Append the new filename with correct preprocessed suffix.
531         size_t I, E;
532         I = Cmd.find("-main-file-name ");
533         assert (I != std::string::npos && "Expected to find -main-file-name");
534         I += 16;
535         E = Cmd.find(" ", I);
536         assert (E != std::string::npos && "-main-file-name missing argument?");
537         StringRef OldFilename = StringRef(Cmd).slice(I, E);
538         StringRef NewFilename = llvm::sys::path::filename(*it);
539         I = StringRef(Cmd).rfind(OldFilename);
540         E = I + OldFilename.size();
541         I = Cmd.rfind(" ", I) + 1;
542         Cmd.replace(I, E - I, NewFilename.data(), NewFilename.size());
543         ScriptOS << Cmd;
544         Diag(clang::diag::note_drv_command_failed_diag_msg) << Script;
545       }
546     }
547     Diag(clang::diag::note_drv_command_failed_diag_msg)
548       << "\n\n********************";
549   } else {
550     // Failure, remove preprocessed files.
551     if (!C.getArgs().hasArg(options::OPT_save_temps))
552       C.CleanupFileList(C.getTempFiles(), true);
553 
554     Diag(clang::diag::note_drv_command_failed_diag_msg)
555       << "Error generating preprocessed source(s).";
556   }
557 }
558 
559 int Driver::ExecuteCompilation(const Compilation &C,
560                                const Command *&FailingCommand) const {
561   // Just print if -### was present.
562   if (C.getArgs().hasArg(options::OPT__HASH_HASH_HASH)) {
563     C.PrintJob(llvm::errs(), C.getJobs(), "\n", true);
564     return 0;
565   }
566 
567   // If there were errors building the compilation, quit now.
568   if (Diags.hasErrorOccurred())
569     return 1;
570 
571   int Res = C.ExecuteJob(C.getJobs(), FailingCommand);
572 
573   // Remove temp files.
574   C.CleanupFileList(C.getTempFiles());
575 
576   // If the command succeeded, we are done.
577   if (Res == 0)
578     return Res;
579 
580   // Otherwise, remove result files as well.
581   if (!C.getArgs().hasArg(options::OPT_save_temps)) {
582     C.CleanupFileList(C.getResultFiles(), true);
583 
584     // Failure result files are valid unless we crashed.
585     if (Res < 0) {
586       C.CleanupFileList(C.getFailureResultFiles(), true);
587 #ifdef _WIN32
588       // Exit status should not be negative on Win32,
589       // unless abnormal termination.
590       Res = 1;
591 #endif
592     }
593   }
594 
595   // Print extra information about abnormal failures, if possible.
596   //
597   // This is ad-hoc, but we don't want to be excessively noisy. If the result
598   // status was 1, assume the command failed normally. In particular, if it was
599   // the compiler then assume it gave a reasonable error code. Failures in other
600   // tools are less common, and they generally have worse diagnostics, so always
601   // print the diagnostic there.
602   const Tool &FailingTool = FailingCommand->getCreator();
603 
604   if (!FailingCommand->getCreator().hasGoodDiagnostics() || Res != 1) {
605     // FIXME: See FIXME above regarding result code interpretation.
606     if (Res < 0)
607       Diag(clang::diag::err_drv_command_signalled)
608         << FailingTool.getShortName();
609     else
610       Diag(clang::diag::err_drv_command_failed)
611         << FailingTool.getShortName() << Res;
612   }
613 
614   return Res;
615 }
616 
617 void Driver::PrintOptions(const ArgList &Args) const {
618   unsigned i = 0;
619   for (ArgList::const_iterator it = Args.begin(), ie = Args.end();
620        it != ie; ++it, ++i) {
621     Arg *A = *it;
622     llvm::errs() << "Option " << i << " - "
623                  << "Name: \"" << A->getOption().getName() << "\", "
624                  << "Values: {";
625     for (unsigned j = 0; j < A->getNumValues(); ++j) {
626       if (j)
627         llvm::errs() << ", ";
628       llvm::errs() << '"' << A->getValue(Args, j) << '"';
629     }
630     llvm::errs() << "}\n";
631   }
632 }
633 
634 void Driver::PrintHelp(bool ShowHidden) const {
635   getOpts().PrintHelp(llvm::outs(), Name.c_str(), DriverTitle.c_str(),
636                       ShowHidden);
637 }
638 
639 void Driver::PrintVersion(const Compilation &C, raw_ostream &OS) const {
640   // FIXME: The following handlers should use a callback mechanism, we don't
641   // know what the client would like to do.
642   OS << getClangFullVersion() << '\n';
643   const ToolChain &TC = C.getDefaultToolChain();
644   OS << "Target: " << TC.getTripleString() << '\n';
645 
646   // Print the threading model.
647   //
648   // FIXME: Implement correctly.
649   OS << "Thread model: " << "posix" << '\n';
650 }
651 
652 /// PrintDiagnosticCategories - Implement the --print-diagnostic-categories
653 /// option.
654 static void PrintDiagnosticCategories(raw_ostream &OS) {
655   // Skip the empty category.
656   for (unsigned i = 1, max = DiagnosticIDs::getNumberOfCategories();
657        i != max; ++i)
658     OS << i << ',' << DiagnosticIDs::getCategoryNameFromID(i) << '\n';
659 }
660 
661 bool Driver::HandleImmediateArgs(const Compilation &C) {
662   // The order these options are handled in gcc is all over the place, but we
663   // don't expect inconsistencies w.r.t. that to matter in practice.
664 
665   if (C.getArgs().hasArg(options::OPT_dumpmachine)) {
666     llvm::outs() << C.getDefaultToolChain().getTripleString() << '\n';
667     return false;
668   }
669 
670   if (C.getArgs().hasArg(options::OPT_dumpversion)) {
671     // Since -dumpversion is only implemented for pedantic GCC compatibility, we
672     // return an answer which matches our definition of __VERSION__.
673     //
674     // If we want to return a more correct answer some day, then we should
675     // introduce a non-pedantically GCC compatible mode to Clang in which we
676     // provide sensible definitions for -dumpversion, __VERSION__, etc.
677     llvm::outs() << "4.2.1\n";
678     return false;
679   }
680 
681   if (C.getArgs().hasArg(options::OPT__print_diagnostic_categories)) {
682     PrintDiagnosticCategories(llvm::outs());
683     return false;
684   }
685 
686   if (C.getArgs().hasArg(options::OPT_help) ||
687       C.getArgs().hasArg(options::OPT__help_hidden)) {
688     PrintHelp(C.getArgs().hasArg(options::OPT__help_hidden));
689     return false;
690   }
691 
692   if (C.getArgs().hasArg(options::OPT__version)) {
693     // Follow gcc behavior and use stdout for --version and stderr for -v.
694     PrintVersion(C, llvm::outs());
695     return false;
696   }
697 
698   if (C.getArgs().hasArg(options::OPT_v) ||
699       C.getArgs().hasArg(options::OPT__HASH_HASH_HASH)) {
700     PrintVersion(C, llvm::errs());
701     SuppressMissingInputWarning = true;
702   }
703 
704   const ToolChain &TC = C.getDefaultToolChain();
705   if (C.getArgs().hasArg(options::OPT_print_search_dirs)) {
706     llvm::outs() << "programs: =";
707     for (ToolChain::path_list::const_iterator it = TC.getProgramPaths().begin(),
708            ie = TC.getProgramPaths().end(); it != ie; ++it) {
709       if (it != TC.getProgramPaths().begin())
710         llvm::outs() << ':';
711       llvm::outs() << *it;
712     }
713     llvm::outs() << "\n";
714     llvm::outs() << "libraries: =" << ResourceDir;
715 
716     StringRef sysroot = C.getSysRoot();
717 
718     for (ToolChain::path_list::const_iterator it = TC.getFilePaths().begin(),
719            ie = TC.getFilePaths().end(); it != ie; ++it) {
720       llvm::outs() << ':';
721       const char *path = it->c_str();
722       if (path[0] == '=')
723         llvm::outs() << sysroot << path + 1;
724       else
725         llvm::outs() << path;
726     }
727     llvm::outs() << "\n";
728     return false;
729   }
730 
731   // FIXME: The following handlers should use a callback mechanism, we don't
732   // know what the client would like to do.
733   if (Arg *A = C.getArgs().getLastArg(options::OPT_print_file_name_EQ)) {
734     llvm::outs() << GetFilePath(A->getValue(C.getArgs()), TC) << "\n";
735     return false;
736   }
737 
738   if (Arg *A = C.getArgs().getLastArg(options::OPT_print_prog_name_EQ)) {
739     llvm::outs() << GetProgramPath(A->getValue(C.getArgs()), TC) << "\n";
740     return false;
741   }
742 
743   if (C.getArgs().hasArg(options::OPT_print_libgcc_file_name)) {
744     llvm::outs() << GetFilePath("libgcc.a", TC) << "\n";
745     return false;
746   }
747 
748   if (C.getArgs().hasArg(options::OPT_print_multi_lib)) {
749     // FIXME: We need tool chain support for this.
750     llvm::outs() << ".;\n";
751 
752     switch (C.getDefaultToolChain().getTriple().getArch()) {
753     default:
754       break;
755 
756     case llvm::Triple::x86_64:
757       llvm::outs() << "x86_64;@m64" << "\n";
758       break;
759 
760     case llvm::Triple::ppc64:
761       llvm::outs() << "ppc64;@m64" << "\n";
762       break;
763     }
764     return false;
765   }
766 
767   // FIXME: What is the difference between print-multi-directory and
768   // print-multi-os-directory?
769   if (C.getArgs().hasArg(options::OPT_print_multi_directory) ||
770       C.getArgs().hasArg(options::OPT_print_multi_os_directory)) {
771     switch (C.getDefaultToolChain().getTriple().getArch()) {
772     default:
773     case llvm::Triple::x86:
774     case llvm::Triple::ppc:
775       llvm::outs() << "." << "\n";
776       break;
777 
778     case llvm::Triple::x86_64:
779       llvm::outs() << "x86_64" << "\n";
780       break;
781 
782     case llvm::Triple::ppc64:
783       llvm::outs() << "ppc64" << "\n";
784       break;
785     }
786     return false;
787   }
788 
789   return true;
790 }
791 
792 static unsigned PrintActions1(const Compilation &C, Action *A,
793                               std::map<Action*, unsigned> &Ids) {
794   if (Ids.count(A))
795     return Ids[A];
796 
797   std::string str;
798   llvm::raw_string_ostream os(str);
799 
800   os << Action::getClassName(A->getKind()) << ", ";
801   if (InputAction *IA = dyn_cast<InputAction>(A)) {
802     os << "\"" << IA->getInputArg().getValue(C.getArgs()) << "\"";
803   } else if (BindArchAction *BIA = dyn_cast<BindArchAction>(A)) {
804     os << '"' << BIA->getArchName() << '"'
805        << ", {" << PrintActions1(C, *BIA->begin(), Ids) << "}";
806   } else {
807     os << "{";
808     for (Action::iterator it = A->begin(), ie = A->end(); it != ie;) {
809       os << PrintActions1(C, *it, Ids);
810       ++it;
811       if (it != ie)
812         os << ", ";
813     }
814     os << "}";
815   }
816 
817   unsigned Id = Ids.size();
818   Ids[A] = Id;
819   llvm::errs() << Id << ": " << os.str() << ", "
820                << types::getTypeName(A->getType()) << "\n";
821 
822   return Id;
823 }
824 
825 void Driver::PrintActions(const Compilation &C) const {
826   std::map<Action*, unsigned> Ids;
827   for (ActionList::const_iterator it = C.getActions().begin(),
828          ie = C.getActions().end(); it != ie; ++it)
829     PrintActions1(C, *it, Ids);
830 }
831 
832 /// \brief Check whether the given input tree contains any compilation or
833 /// assembly actions.
834 static bool ContainsCompileOrAssembleAction(const Action *A) {
835   if (isa<CompileJobAction>(A) || isa<AssembleJobAction>(A))
836     return true;
837 
838   for (Action::const_iterator it = A->begin(), ie = A->end(); it != ie; ++it)
839     if (ContainsCompileOrAssembleAction(*it))
840       return true;
841 
842   return false;
843 }
844 
845 void Driver::BuildUniversalActions(const ToolChain &TC,
846                                    const DerivedArgList &Args,
847                                    const InputList &BAInputs,
848                                    ActionList &Actions) const {
849   llvm::PrettyStackTraceString CrashInfo("Building universal build actions");
850   // Collect the list of architectures. Duplicates are allowed, but should only
851   // be handled once (in the order seen).
852   llvm::StringSet<> ArchNames;
853   SmallVector<const char *, 4> Archs;
854   for (ArgList::const_iterator it = Args.begin(), ie = Args.end();
855        it != ie; ++it) {
856     Arg *A = *it;
857 
858     if (A->getOption().matches(options::OPT_arch)) {
859       // Validate the option here; we don't save the type here because its
860       // particular spelling may participate in other driver choices.
861       llvm::Triple::ArchType Arch =
862         llvm::Triple::getArchTypeForDarwinArchName(A->getValue(Args));
863       if (Arch == llvm::Triple::UnknownArch) {
864         Diag(clang::diag::err_drv_invalid_arch_name)
865           << A->getAsString(Args);
866         continue;
867       }
868 
869       A->claim();
870       if (ArchNames.insert(A->getValue(Args)))
871         Archs.push_back(A->getValue(Args));
872     }
873   }
874 
875   // When there is no explicit arch for this platform, make sure we still bind
876   // the architecture (to the default) so that -Xarch_ is handled correctly.
877   if (!Archs.size())
878     Archs.push_back(Args.MakeArgString(TC.getArchName()));
879 
880   // FIXME: We killed off some others but these aren't yet detected in a
881   // functional manner. If we added information to jobs about which "auxiliary"
882   // files they wrote then we could detect the conflict these cause downstream.
883   if (Archs.size() > 1) {
884     // No recovery needed, the point of this is just to prevent
885     // overwriting the same files.
886     if (const Arg *A = Args.getLastArg(options::OPT_save_temps))
887       Diag(clang::diag::err_drv_invalid_opt_with_multiple_archs)
888         << A->getAsString(Args);
889   }
890 
891   ActionList SingleActions;
892   BuildActions(TC, Args, BAInputs, SingleActions);
893 
894   // Add in arch bindings for every top level action, as well as lipo and
895   // dsymutil steps if needed.
896   for (unsigned i = 0, e = SingleActions.size(); i != e; ++i) {
897     Action *Act = SingleActions[i];
898 
899     // Make sure we can lipo this kind of output. If not (and it is an actual
900     // output) then we disallow, since we can't create an output file with the
901     // right name without overwriting it. We could remove this oddity by just
902     // changing the output names to include the arch, which would also fix
903     // -save-temps. Compatibility wins for now.
904 
905     if (Archs.size() > 1 && !types::canLipoType(Act->getType()))
906       Diag(clang::diag::err_drv_invalid_output_with_multiple_archs)
907         << types::getTypeName(Act->getType());
908 
909     ActionList Inputs;
910     for (unsigned i = 0, e = Archs.size(); i != e; ++i) {
911       Inputs.push_back(new BindArchAction(Act, Archs[i]));
912       if (i != 0)
913         Inputs.back()->setOwnsInputs(false);
914     }
915 
916     // Lipo if necessary, we do it this way because we need to set the arch flag
917     // so that -Xarch_ gets overwritten.
918     if (Inputs.size() == 1 || Act->getType() == types::TY_Nothing)
919       Actions.append(Inputs.begin(), Inputs.end());
920     else
921       Actions.push_back(new LipoJobAction(Inputs, Act->getType()));
922 
923     // Handle debug info queries.
924     Arg *A = Args.getLastArg(options::OPT_g_Group);
925     if (A && !A->getOption().matches(options::OPT_g0) &&
926         !A->getOption().matches(options::OPT_gstabs) &&
927         ContainsCompileOrAssembleAction(Actions.back())) {
928 
929       // Add a 'dsymutil' step if necessary, when debug info is enabled and we
930       // have a compile input. We need to run 'dsymutil' ourselves in such cases
931       // because the debug info will refer to a temporary object file which is
932       // will be removed at the end of the compilation process.
933       if (Act->getType() == types::TY_Image) {
934         ActionList Inputs;
935         Inputs.push_back(Actions.back());
936         Actions.pop_back();
937         Actions.push_back(new DsymutilJobAction(Inputs, types::TY_dSYM));
938       }
939 
940       // Verify the output (debug information only) if we passed '-verify'.
941       if (Args.hasArg(options::OPT_verify)) {
942         ActionList VerifyInputs;
943         VerifyInputs.push_back(Actions.back());
944         Actions.pop_back();
945         Actions.push_back(new VerifyJobAction(VerifyInputs,
946                                               types::TY_Nothing));
947       }
948     }
949   }
950 }
951 
952 // Construct a the list of inputs and their types.
953 void Driver::BuildInputs(const ToolChain &TC, const DerivedArgList &Args,
954                          InputList &Inputs) const {
955   // Track the current user specified (-x) input. We also explicitly track the
956   // argument used to set the type; we only want to claim the type when we
957   // actually use it, so we warn about unused -x arguments.
958   types::ID InputType = types::TY_Nothing;
959   Arg *InputTypeArg = 0;
960 
961   for (ArgList::const_iterator it = Args.begin(), ie = Args.end();
962        it != ie; ++it) {
963     Arg *A = *it;
964 
965     if (isa<InputOption>(A->getOption())) {
966       const char *Value = A->getValue(Args);
967       types::ID Ty = types::TY_INVALID;
968 
969       // Infer the input type if necessary.
970       if (InputType == types::TY_Nothing) {
971         // If there was an explicit arg for this, claim it.
972         if (InputTypeArg)
973           InputTypeArg->claim();
974 
975         // stdin must be handled specially.
976         if (memcmp(Value, "-", 2) == 0) {
977           // If running with -E, treat as a C input (this changes the builtin
978           // macros, for example). This may be overridden by -ObjC below.
979           //
980           // Otherwise emit an error but still use a valid type to avoid
981           // spurious errors (e.g., no inputs).
982           if (!Args.hasArgNoClaim(options::OPT_E) && !CCCIsCPP)
983             Diag(clang::diag::err_drv_unknown_stdin_type);
984           Ty = types::TY_C;
985         } else {
986           // Otherwise lookup by extension.
987           // Fallback is C if invoked as C preprocessor or Object otherwise.
988           // We use a host hook here because Darwin at least has its own
989           // idea of what .s is.
990           if (const char *Ext = strrchr(Value, '.'))
991             Ty = TC.LookupTypeForExtension(Ext + 1);
992 
993           if (Ty == types::TY_INVALID) {
994             if (CCCIsCPP)
995               Ty = types::TY_C;
996             else
997               Ty = types::TY_Object;
998           }
999 
1000           // If the driver is invoked as C++ compiler (like clang++ or c++) it
1001           // should autodetect some input files as C++ for g++ compatibility.
1002           if (CCCIsCXX) {
1003             types::ID OldTy = Ty;
1004             Ty = types::lookupCXXTypeForCType(Ty);
1005 
1006             if (Ty != OldTy)
1007               Diag(clang::diag::warn_drv_treating_input_as_cxx)
1008                 << getTypeName(OldTy) << getTypeName(Ty);
1009           }
1010         }
1011 
1012         // -ObjC and -ObjC++ override the default language, but only for "source
1013         // files". We just treat everything that isn't a linker input as a
1014         // source file.
1015         //
1016         // FIXME: Clean this up if we move the phase sequence into the type.
1017         if (Ty != types::TY_Object) {
1018           if (Args.hasArg(options::OPT_ObjC))
1019             Ty = types::TY_ObjC;
1020           else if (Args.hasArg(options::OPT_ObjCXX))
1021             Ty = types::TY_ObjCXX;
1022         }
1023       } else {
1024         assert(InputTypeArg && "InputType set w/o InputTypeArg");
1025         InputTypeArg->claim();
1026         Ty = InputType;
1027       }
1028 
1029       // Check that the file exists, if enabled.
1030       if (CheckInputsExist && memcmp(Value, "-", 2) != 0) {
1031         SmallString<64> Path(Value);
1032         if (Arg *WorkDir = Args.getLastArg(options::OPT_working_directory)) {
1033           SmallString<64> Directory(WorkDir->getValue(Args));
1034           if (llvm::sys::path::is_absolute(Directory.str())) {
1035             llvm::sys::path::append(Directory, Value);
1036             Path.assign(Directory);
1037           }
1038         }
1039 
1040         bool exists = false;
1041         if (llvm::sys::fs::exists(Path.c_str(), exists) || !exists)
1042           Diag(clang::diag::err_drv_no_such_file) << Path.str();
1043         else
1044           Inputs.push_back(std::make_pair(Ty, A));
1045       } else
1046         Inputs.push_back(std::make_pair(Ty, A));
1047 
1048     } else if (A->getOption().isLinkerInput()) {
1049       // Just treat as object type, we could make a special type for this if
1050       // necessary.
1051       Inputs.push_back(std::make_pair(types::TY_Object, A));
1052 
1053     } else if (A->getOption().matches(options::OPT_x)) {
1054       InputTypeArg = A;
1055       InputType = types::lookupTypeForTypeSpecifier(A->getValue(Args));
1056       A->claim();
1057 
1058       // Follow gcc behavior and treat as linker input for invalid -x
1059       // options. Its not clear why we shouldn't just revert to unknown; but
1060       // this isn't very important, we might as well be bug compatible.
1061       if (!InputType) {
1062         Diag(clang::diag::err_drv_unknown_language) << A->getValue(Args);
1063         InputType = types::TY_Object;
1064       }
1065     }
1066   }
1067   if (CCCIsCPP && Inputs.empty()) {
1068     // If called as standalone preprocessor, stdin is processed
1069     // if no other input is present.
1070     unsigned Index = Args.getBaseArgs().MakeIndex("-");
1071     Arg *A = Opts->ParseOneArg(Args, Index);
1072     A->claim();
1073     Inputs.push_back(std::make_pair(types::TY_C, A));
1074   }
1075 }
1076 
1077 void Driver::BuildActions(const ToolChain &TC, const DerivedArgList &Args,
1078                           const InputList &Inputs, ActionList &Actions) const {
1079   llvm::PrettyStackTraceString CrashInfo("Building compilation actions");
1080 
1081   if (!SuppressMissingInputWarning && Inputs.empty()) {
1082     Diag(clang::diag::err_drv_no_input_files);
1083     return;
1084   }
1085 
1086   Arg *FinalPhaseArg;
1087   phases::ID FinalPhase = getFinalPhase(Args, &FinalPhaseArg);
1088 
1089   // Reject -Z* at the top level, these options should never have been exposed
1090   // by gcc.
1091   if (Arg *A = Args.getLastArg(options::OPT_Z_Joined))
1092     Diag(clang::diag::err_drv_use_of_Z_option) << A->getAsString(Args);
1093 
1094   // Construct the actions to perform.
1095   ActionList LinkerInputs;
1096   unsigned NumSteps = 0;
1097   for (unsigned i = 0, e = Inputs.size(); i != e; ++i) {
1098     types::ID InputType = Inputs[i].first;
1099     const Arg *InputArg = Inputs[i].second;
1100 
1101     NumSteps = types::getNumCompilationPhases(InputType);
1102     assert(NumSteps && "Invalid number of steps!");
1103 
1104     // If the first step comes after the final phase we are doing as part of
1105     // this compilation, warn the user about it.
1106     phases::ID InitialPhase = types::getCompilationPhase(InputType, 0);
1107     if (InitialPhase > FinalPhase) {
1108       // Claim here to avoid the more general unused warning.
1109       InputArg->claim();
1110 
1111       // Suppress all unused style warnings with -Qunused-arguments
1112       if (Args.hasArg(options::OPT_Qunused_arguments))
1113         continue;
1114 
1115       // Special case '-E' warning on a previously preprocessed file to make
1116       // more sense.
1117       if (InitialPhase == phases::Compile && FinalPhase == phases::Preprocess &&
1118           getPreprocessedType(InputType) == types::TY_INVALID)
1119         Diag(clang::diag::warn_drv_preprocessed_input_file_unused)
1120           << InputArg->getAsString(Args)
1121           << FinalPhaseArg->getOption().getName();
1122       else
1123         Diag(clang::diag::warn_drv_input_file_unused)
1124           << InputArg->getAsString(Args)
1125           << getPhaseName(InitialPhase)
1126           << FinalPhaseArg->getOption().getName();
1127       continue;
1128     }
1129 
1130     // Build the pipeline for this file.
1131     OwningPtr<Action> Current(new InputAction(*InputArg, InputType));
1132     for (unsigned i = 0; i != NumSteps; ++i) {
1133       phases::ID Phase = types::getCompilationPhase(InputType, i);
1134 
1135       // We are done if this step is past what the user requested.
1136       if (Phase > FinalPhase)
1137         break;
1138 
1139       // Queue linker inputs.
1140       if (Phase == phases::Link) {
1141         assert(i + 1 == NumSteps && "linking must be final compilation step.");
1142         LinkerInputs.push_back(Current.take());
1143         break;
1144       }
1145 
1146       // Some types skip the assembler phase (e.g., llvm-bc), but we can't
1147       // encode this in the steps because the intermediate type depends on
1148       // arguments. Just special case here.
1149       if (Phase == phases::Assemble && Current->getType() != types::TY_PP_Asm)
1150         continue;
1151 
1152       // Otherwise construct the appropriate action.
1153       Current.reset(ConstructPhaseAction(Args, Phase, Current.take()));
1154       if (Current->getType() == types::TY_Nothing)
1155         break;
1156     }
1157 
1158     // If we ended with something, add to the output list.
1159     if (Current)
1160       Actions.push_back(Current.take());
1161   }
1162 
1163   // Add a link action if necessary.
1164   if (!LinkerInputs.empty())
1165     Actions.push_back(new LinkJobAction(LinkerInputs, types::TY_Image));
1166 
1167   // If we are linking, claim any options which are obviously only used for
1168   // compilation.
1169   if (FinalPhase == phases::Link && (NumSteps == 1))
1170     Args.ClaimAllArgs(options::OPT_CompileOnly_Group);
1171 }
1172 
1173 Action *Driver::ConstructPhaseAction(const ArgList &Args, phases::ID Phase,
1174                                      Action *Input) const {
1175   llvm::PrettyStackTraceString CrashInfo("Constructing phase actions");
1176   // Build the appropriate action.
1177   switch (Phase) {
1178   case phases::Link: llvm_unreachable("link action invalid here.");
1179   case phases::Preprocess: {
1180     types::ID OutputTy;
1181     // -{M, MM} alter the output type.
1182     if (Args.hasArg(options::OPT_M, options::OPT_MM)) {
1183       OutputTy = types::TY_Dependencies;
1184     } else {
1185       OutputTy = Input->getType();
1186       if (!Args.hasFlag(options::OPT_frewrite_includes,
1187                         options::OPT_fno_rewrite_includes, false))
1188         OutputTy = types::getPreprocessedType(OutputTy);
1189       assert(OutputTy != types::TY_INVALID &&
1190              "Cannot preprocess this input type!");
1191     }
1192     return new PreprocessJobAction(Input, OutputTy);
1193   }
1194   case phases::Precompile:
1195     return new PrecompileJobAction(Input, types::TY_PCH);
1196   case phases::Compile: {
1197     if (Args.hasArg(options::OPT_fsyntax_only)) {
1198       return new CompileJobAction(Input, types::TY_Nothing);
1199     } else if (Args.hasArg(options::OPT_rewrite_objc)) {
1200       return new CompileJobAction(Input, types::TY_RewrittenObjC);
1201     } else if (Args.hasArg(options::OPT_rewrite_legacy_objc)) {
1202       return new CompileJobAction(Input, types::TY_RewrittenLegacyObjC);
1203     } else if (Args.hasArg(options::OPT__analyze, options::OPT__analyze_auto)) {
1204       return new AnalyzeJobAction(Input, types::TY_Plist);
1205     } else if (Args.hasArg(options::OPT__migrate)) {
1206       return new MigrateJobAction(Input, types::TY_Remap);
1207     } else if (Args.hasArg(options::OPT_emit_ast)) {
1208       return new CompileJobAction(Input, types::TY_AST);
1209     } else if (IsUsingLTO(Args)) {
1210       types::ID Output =
1211         Args.hasArg(options::OPT_S) ? types::TY_LTO_IR : types::TY_LTO_BC;
1212       return new CompileJobAction(Input, Output);
1213     } else {
1214       return new CompileJobAction(Input, types::TY_PP_Asm);
1215     }
1216   }
1217   case phases::Assemble:
1218     return new AssembleJobAction(Input, types::TY_Object);
1219   }
1220 
1221   llvm_unreachable("invalid phase in ConstructPhaseAction");
1222 }
1223 
1224 bool Driver::IsUsingLTO(const ArgList &Args) const {
1225   // Check for -emit-llvm or -flto.
1226   if (Args.hasArg(options::OPT_emit_llvm) ||
1227       Args.hasFlag(options::OPT_flto, options::OPT_fno_lto, false))
1228     return true;
1229 
1230   // Check for -O4.
1231   if (const Arg *A = Args.getLastArg(options::OPT_O_Group))
1232       return A->getOption().matches(options::OPT_O4);
1233 
1234   return false;
1235 }
1236 
1237 void Driver::BuildJobs(Compilation &C) const {
1238   llvm::PrettyStackTraceString CrashInfo("Building compilation jobs");
1239 
1240   Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o);
1241 
1242   // It is an error to provide a -o option if we are making multiple output
1243   // files.
1244   if (FinalOutput) {
1245     unsigned NumOutputs = 0;
1246     for (ActionList::const_iterator it = C.getActions().begin(),
1247            ie = C.getActions().end(); it != ie; ++it)
1248       if ((*it)->getType() != types::TY_Nothing)
1249         ++NumOutputs;
1250 
1251     if (NumOutputs > 1) {
1252       Diag(clang::diag::err_drv_output_argument_with_multiple_files);
1253       FinalOutput = 0;
1254     }
1255   }
1256 
1257   for (ActionList::const_iterator it = C.getActions().begin(),
1258          ie = C.getActions().end(); it != ie; ++it) {
1259     Action *A = *it;
1260 
1261     // If we are linking an image for multiple archs then the linker wants
1262     // -arch_multiple and -final_output <final image name>. Unfortunately, this
1263     // doesn't fit in cleanly because we have to pass this information down.
1264     //
1265     // FIXME: This is a hack; find a cleaner way to integrate this into the
1266     // process.
1267     const char *LinkingOutput = 0;
1268     if (isa<LipoJobAction>(A)) {
1269       if (FinalOutput)
1270         LinkingOutput = FinalOutput->getValue(C.getArgs());
1271       else
1272         LinkingOutput = DefaultImageName.c_str();
1273     }
1274 
1275     InputInfo II;
1276     BuildJobsForAction(C, A, &C.getDefaultToolChain(),
1277                        /*BoundArch*/0,
1278                        /*AtTopLevel*/ true,
1279                        /*LinkingOutput*/ LinkingOutput,
1280                        II);
1281   }
1282 
1283   // If the user passed -Qunused-arguments or there were errors, don't warn
1284   // about any unused arguments.
1285   if (Diags.hasErrorOccurred() ||
1286       C.getArgs().hasArg(options::OPT_Qunused_arguments))
1287     return;
1288 
1289   // Claim -### here.
1290   (void) C.getArgs().hasArg(options::OPT__HASH_HASH_HASH);
1291 
1292   for (ArgList::const_iterator it = C.getArgs().begin(), ie = C.getArgs().end();
1293        it != ie; ++it) {
1294     Arg *A = *it;
1295 
1296     // FIXME: It would be nice to be able to send the argument to the
1297     // DiagnosticsEngine, so that extra values, position, and so on could be
1298     // printed.
1299     if (!A->isClaimed()) {
1300       if (A->getOption().hasNoArgumentUnused())
1301         continue;
1302 
1303       // Suppress the warning automatically if this is just a flag, and it is an
1304       // instance of an argument we already claimed.
1305       const Option &Opt = A->getOption();
1306       if (isa<FlagOption>(Opt)) {
1307         bool DuplicateClaimed = false;
1308 
1309         for (arg_iterator it = C.getArgs().filtered_begin(&Opt),
1310                ie = C.getArgs().filtered_end(); it != ie; ++it) {
1311           if ((*it)->isClaimed()) {
1312             DuplicateClaimed = true;
1313             break;
1314           }
1315         }
1316 
1317         if (DuplicateClaimed)
1318           continue;
1319       }
1320 
1321       Diag(clang::diag::warn_drv_unused_argument)
1322         << A->getAsString(C.getArgs());
1323     }
1324   }
1325 }
1326 
1327 static const Tool &SelectToolForJob(Compilation &C, const ToolChain *TC,
1328                                     const JobAction *JA,
1329                                     const ActionList *&Inputs) {
1330   const Tool *ToolForJob = 0;
1331 
1332   // See if we should look for a compiler with an integrated assembler. We match
1333   // bottom up, so what we are actually looking for is an assembler job with a
1334   // compiler input.
1335 
1336   if (C.getArgs().hasFlag(options::OPT_integrated_as,
1337                           options::OPT_no_integrated_as,
1338                           TC->IsIntegratedAssemblerDefault()) &&
1339       !C.getArgs().hasArg(options::OPT_save_temps) &&
1340       isa<AssembleJobAction>(JA) &&
1341       Inputs->size() == 1 && isa<CompileJobAction>(*Inputs->begin())) {
1342     const Tool &Compiler = TC->SelectTool(
1343       C, cast<JobAction>(**Inputs->begin()), (*Inputs)[0]->getInputs());
1344     if (Compiler.hasIntegratedAssembler()) {
1345       Inputs = &(*Inputs)[0]->getInputs();
1346       ToolForJob = &Compiler;
1347     }
1348   }
1349 
1350   // Otherwise use the tool for the current job.
1351   if (!ToolForJob)
1352     ToolForJob = &TC->SelectTool(C, *JA, *Inputs);
1353 
1354   // See if we should use an integrated preprocessor. We do so when we have
1355   // exactly one input, since this is the only use case we care about
1356   // (irrelevant since we don't support combine yet).
1357   if (Inputs->size() == 1 && isa<PreprocessJobAction>(*Inputs->begin()) &&
1358       !C.getArgs().hasArg(options::OPT_no_integrated_cpp) &&
1359       !C.getArgs().hasArg(options::OPT_traditional_cpp) &&
1360       !C.getArgs().hasArg(options::OPT_save_temps) &&
1361       ToolForJob->hasIntegratedCPP())
1362     Inputs = &(*Inputs)[0]->getInputs();
1363 
1364   return *ToolForJob;
1365 }
1366 
1367 void Driver::BuildJobsForAction(Compilation &C,
1368                                 const Action *A,
1369                                 const ToolChain *TC,
1370                                 const char *BoundArch,
1371                                 bool AtTopLevel,
1372                                 const char *LinkingOutput,
1373                                 InputInfo &Result) const {
1374   llvm::PrettyStackTraceString CrashInfo("Building compilation jobs");
1375 
1376   if (const InputAction *IA = dyn_cast<InputAction>(A)) {
1377     // FIXME: It would be nice to not claim this here; maybe the old scheme of
1378     // just using Args was better?
1379     const Arg &Input = IA->getInputArg();
1380     Input.claim();
1381     if (Input.getOption().matches(options::OPT_INPUT)) {
1382       const char *Name = Input.getValue(C.getArgs());
1383       Result = InputInfo(Name, A->getType(), Name);
1384     } else
1385       Result = InputInfo(&Input, A->getType(), "");
1386     return;
1387   }
1388 
1389   if (const BindArchAction *BAA = dyn_cast<BindArchAction>(A)) {
1390     const ToolChain *TC;
1391     const char *ArchName = BAA->getArchName();
1392 
1393     if (ArchName)
1394       TC = &getToolChain(C.getArgs(), ArchName);
1395     else
1396       TC = &C.getDefaultToolChain();
1397 
1398     BuildJobsForAction(C, *BAA->begin(), TC, BAA->getArchName(),
1399                        AtTopLevel, LinkingOutput, Result);
1400     return;
1401   }
1402 
1403   const ActionList *Inputs = &A->getInputs();
1404 
1405   const JobAction *JA = cast<JobAction>(A);
1406   const Tool &T = SelectToolForJob(C, TC, JA, Inputs);
1407 
1408   // Only use pipes when there is exactly one input.
1409   InputInfoList InputInfos;
1410   for (ActionList::const_iterator it = Inputs->begin(), ie = Inputs->end();
1411        it != ie; ++it) {
1412     // Treat dsymutil sub-jobs as being at the top-level too, they shouldn't get
1413     // temporary output names.
1414     //
1415     // FIXME: Clean this up.
1416     bool SubJobAtTopLevel = false;
1417     if (AtTopLevel && isa<DsymutilJobAction>(A))
1418       SubJobAtTopLevel = true;
1419 
1420     // Also treat verify sub-jobs as being at the top-level. They don't
1421     // produce any output and so don't need temporary output names.
1422     if (AtTopLevel && isa<VerifyJobAction>(A))
1423       SubJobAtTopLevel = true;
1424 
1425     InputInfo II;
1426     BuildJobsForAction(C, *it, TC, BoundArch,
1427                        SubJobAtTopLevel, LinkingOutput, II);
1428     InputInfos.push_back(II);
1429   }
1430 
1431   // Always use the first input as the base input.
1432   const char *BaseInput = InputInfos[0].getBaseInput();
1433 
1434   // ... except dsymutil actions, which use their actual input as the base
1435   // input.
1436   if (JA->getType() == types::TY_dSYM)
1437     BaseInput = InputInfos[0].getFilename();
1438 
1439   // Determine the place to write output to, if any.
1440   if (JA->getType() == types::TY_Nothing) {
1441     Result = InputInfo(A->getType(), BaseInput);
1442   } else {
1443     Result = InputInfo(GetNamedOutputPath(C, *JA, BaseInput, AtTopLevel),
1444                        A->getType(), BaseInput);
1445   }
1446 
1447   if (CCCPrintBindings && !CCGenDiagnostics) {
1448     llvm::errs() << "# \"" << T.getToolChain().getTripleString() << '"'
1449                  << " - \"" << T.getName() << "\", inputs: [";
1450     for (unsigned i = 0, e = InputInfos.size(); i != e; ++i) {
1451       llvm::errs() << InputInfos[i].getAsString();
1452       if (i + 1 != e)
1453         llvm::errs() << ", ";
1454     }
1455     llvm::errs() << "], output: " << Result.getAsString() << "\n";
1456   } else {
1457     T.ConstructJob(C, *JA, Result, InputInfos,
1458                    C.getArgsForToolChain(TC, BoundArch), LinkingOutput);
1459   }
1460 }
1461 
1462 const char *Driver::GetNamedOutputPath(Compilation &C,
1463                                        const JobAction &JA,
1464                                        const char *BaseInput,
1465                                        bool AtTopLevel) const {
1466   llvm::PrettyStackTraceString CrashInfo("Computing output path");
1467   // Output to a user requested destination?
1468   if (AtTopLevel && !isa<DsymutilJobAction>(JA) &&
1469       !isa<VerifyJobAction>(JA)) {
1470     if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o))
1471       return C.addResultFile(FinalOutput->getValue(C.getArgs()));
1472   }
1473 
1474   // Default to writing to stdout?
1475   if (AtTopLevel && isa<PreprocessJobAction>(JA) && !CCGenDiagnostics)
1476     return "-";
1477 
1478   // Output to a temporary file?
1479   if ((!AtTopLevel && !C.getArgs().hasArg(options::OPT_save_temps)) ||
1480       CCGenDiagnostics) {
1481     StringRef Name = llvm::sys::path::filename(BaseInput);
1482     std::pair<StringRef, StringRef> Split = Name.split('.');
1483     std::string TmpName =
1484       GetTemporaryPath(Split.first, types::getTypeTempSuffix(JA.getType()));
1485     return C.addTempFile(C.getArgs().MakeArgString(TmpName.c_str()));
1486   }
1487 
1488   SmallString<128> BasePath(BaseInput);
1489   StringRef BaseName;
1490 
1491   // Dsymutil actions should use the full path.
1492   if (isa<DsymutilJobAction>(JA) || isa<VerifyJobAction>(JA))
1493     BaseName = BasePath;
1494   else
1495     BaseName = llvm::sys::path::filename(BasePath);
1496 
1497   // Determine what the derived output name should be.
1498   const char *NamedOutput;
1499   if (JA.getType() == types::TY_Image) {
1500     NamedOutput = DefaultImageName.c_str();
1501   } else {
1502     const char *Suffix = types::getTypeTempSuffix(JA.getType());
1503     assert(Suffix && "All types used for output should have a suffix.");
1504 
1505     std::string::size_type End = std::string::npos;
1506     if (!types::appendSuffixForType(JA.getType()))
1507       End = BaseName.rfind('.');
1508     std::string Suffixed(BaseName.substr(0, End));
1509     Suffixed += '.';
1510     Suffixed += Suffix;
1511     NamedOutput = C.getArgs().MakeArgString(Suffixed.c_str());
1512   }
1513 
1514   // If we're saving temps and the temp file conflicts with the input file,
1515   // then avoid overwriting input file.
1516   if (!AtTopLevel && C.getArgs().hasArg(options::OPT_save_temps) &&
1517       NamedOutput == BaseName) {
1518 
1519     bool SameFile = false;
1520     SmallString<256> Result;
1521     llvm::sys::fs::current_path(Result);
1522     llvm::sys::path::append(Result, BaseName);
1523     llvm::sys::fs::equivalent(BaseInput, Result.c_str(), SameFile);
1524     // Must share the same path to conflict.
1525     if (SameFile) {
1526       StringRef Name = llvm::sys::path::filename(BaseInput);
1527       std::pair<StringRef, StringRef> Split = Name.split('.');
1528       std::string TmpName =
1529         GetTemporaryPath(Split.first, types::getTypeTempSuffix(JA.getType()));
1530       return C.addTempFile(C.getArgs().MakeArgString(TmpName.c_str()));
1531     }
1532   }
1533 
1534   // As an annoying special case, PCH generation doesn't strip the pathname.
1535   if (JA.getType() == types::TY_PCH) {
1536     llvm::sys::path::remove_filename(BasePath);
1537     if (BasePath.empty())
1538       BasePath = NamedOutput;
1539     else
1540       llvm::sys::path::append(BasePath, NamedOutput);
1541     return C.addResultFile(C.getArgs().MakeArgString(BasePath.c_str()));
1542   } else {
1543     return C.addResultFile(NamedOutput);
1544   }
1545 }
1546 
1547 std::string Driver::GetFilePath(const char *Name, const ToolChain &TC) const {
1548   // Respect a limited subset of the '-Bprefix' functionality in GCC by
1549   // attempting to use this prefix when lokup up program paths.
1550   for (Driver::prefix_list::const_iterator it = PrefixDirs.begin(),
1551        ie = PrefixDirs.end(); it != ie; ++it) {
1552     std::string Dir(*it);
1553     if (Dir.empty())
1554       continue;
1555     if (Dir[0] == '=')
1556       Dir = SysRoot + Dir.substr(1);
1557     llvm::sys::Path P(Dir);
1558     P.appendComponent(Name);
1559     bool Exists;
1560     if (!llvm::sys::fs::exists(P.str(), Exists) && Exists)
1561       return P.str();
1562   }
1563 
1564   llvm::sys::Path P(ResourceDir);
1565   P.appendComponent(Name);
1566   bool Exists;
1567   if (!llvm::sys::fs::exists(P.str(), Exists) && Exists)
1568     return P.str();
1569 
1570   const ToolChain::path_list &List = TC.getFilePaths();
1571   for (ToolChain::path_list::const_iterator
1572          it = List.begin(), ie = List.end(); it != ie; ++it) {
1573     std::string Dir(*it);
1574     if (Dir.empty())
1575       continue;
1576     if (Dir[0] == '=')
1577       Dir = SysRoot + Dir.substr(1);
1578     llvm::sys::Path P(Dir);
1579     P.appendComponent(Name);
1580     bool Exists;
1581     if (!llvm::sys::fs::exists(P.str(), Exists) && Exists)
1582       return P.str();
1583   }
1584 
1585   return Name;
1586 }
1587 
1588 static bool isPathExecutable(llvm::sys::Path &P, bool WantFile) {
1589     bool Exists;
1590     return (WantFile ? !llvm::sys::fs::exists(P.str(), Exists) && Exists
1591                  : P.canExecute());
1592 }
1593 
1594 std::string Driver::GetProgramPath(const char *Name, const ToolChain &TC,
1595                                    bool WantFile) const {
1596   // FIXME: Needs a better variable than DefaultTargetTriple
1597   std::string TargetSpecificExecutable(DefaultTargetTriple + "-" + Name);
1598   // Respect a limited subset of the '-Bprefix' functionality in GCC by
1599   // attempting to use this prefix when lokup up program paths.
1600   for (Driver::prefix_list::const_iterator it = PrefixDirs.begin(),
1601        ie = PrefixDirs.end(); it != ie; ++it) {
1602     llvm::sys::Path P(*it);
1603     P.appendComponent(TargetSpecificExecutable);
1604     if (isPathExecutable(P, WantFile)) return P.str();
1605     P.eraseComponent();
1606     P.appendComponent(Name);
1607     if (isPathExecutable(P, WantFile)) return P.str();
1608   }
1609 
1610   const ToolChain::path_list &List = TC.getProgramPaths();
1611   for (ToolChain::path_list::const_iterator
1612          it = List.begin(), ie = List.end(); it != ie; ++it) {
1613     llvm::sys::Path P(*it);
1614     P.appendComponent(TargetSpecificExecutable);
1615     if (isPathExecutable(P, WantFile)) return P.str();
1616     P.eraseComponent();
1617     P.appendComponent(Name);
1618     if (isPathExecutable(P, WantFile)) return P.str();
1619   }
1620 
1621   // If all else failed, search the path.
1622   llvm::sys::Path
1623       P(llvm::sys::Program::FindProgramByName(TargetSpecificExecutable));
1624   if (!P.empty())
1625     return P.str();
1626 
1627   P = llvm::sys::Path(llvm::sys::Program::FindProgramByName(Name));
1628   if (!P.empty())
1629     return P.str();
1630 
1631   return Name;
1632 }
1633 
1634 std::string Driver::GetTemporaryPath(StringRef Prefix, const char *Suffix)
1635   const {
1636   // FIXME: This is lame; sys::Path should provide this function (in particular,
1637   // it should know how to find the temporary files dir).
1638   std::string Error;
1639   const char *TmpDir = ::getenv("TMPDIR");
1640   if (!TmpDir)
1641     TmpDir = ::getenv("TEMP");
1642   if (!TmpDir)
1643     TmpDir = ::getenv("TMP");
1644   if (!TmpDir)
1645     TmpDir = "/tmp";
1646   llvm::sys::Path P(TmpDir);
1647   P.appendComponent(Prefix);
1648   if (P.makeUnique(false, &Error)) {
1649     Diag(clang::diag::err_unable_to_make_temp) << Error;
1650     return "";
1651   }
1652 
1653   // FIXME: Grumble, makeUnique sometimes leaves the file around!?  PR3837.
1654   P.eraseFromDisk(false, 0);
1655 
1656   P.appendSuffix(Suffix);
1657   return P.str();
1658 }
1659 
1660 /// \brief Compute target triple from args.
1661 ///
1662 /// This routine provides the logic to compute a target triple from various
1663 /// args passed to the driver and the default triple string.
1664 static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
1665                                         const ArgList &Args,
1666                                         StringRef DarwinArchName) {
1667   // FIXME: Already done in Compilation *Driver::BuildCompilation
1668   if (const Arg *A = Args.getLastArg(options::OPT_target))
1669     DefaultTargetTriple = A->getValue(Args);
1670 
1671   llvm::Triple Target(llvm::Triple::normalize(DefaultTargetTriple));
1672 
1673   // Handle Darwin-specific options available here.
1674   if (Target.isOSDarwin()) {
1675     // If an explict Darwin arch name is given, that trumps all.
1676     if (!DarwinArchName.empty()) {
1677       Target.setArch(
1678         llvm::Triple::getArchTypeForDarwinArchName(DarwinArchName));
1679       return Target;
1680     }
1681 
1682     // Handle the Darwin '-arch' flag.
1683     if (Arg *A = Args.getLastArg(options::OPT_arch)) {
1684       llvm::Triple::ArchType DarwinArch
1685         = llvm::Triple::getArchTypeForDarwinArchName(A->getValue(Args));
1686       if (DarwinArch != llvm::Triple::UnknownArch)
1687         Target.setArch(DarwinArch);
1688     }
1689   }
1690 
1691   // Skip further flag support on OSes which don't support '-m32' or '-m64'.
1692   if (Target.getArchName() == "tce" ||
1693       Target.getOS() == llvm::Triple::AuroraUX ||
1694       Target.getOS() == llvm::Triple::Minix)
1695     return Target;
1696 
1697   // Handle pseudo-target flags '-m32' and '-m64'.
1698   // FIXME: Should this information be in llvm::Triple?
1699   if (Arg *A = Args.getLastArg(options::OPT_m32, options::OPT_m64)) {
1700     if (A->getOption().matches(options::OPT_m32)) {
1701       if (Target.getArch() == llvm::Triple::x86_64)
1702         Target.setArch(llvm::Triple::x86);
1703       if (Target.getArch() == llvm::Triple::ppc64)
1704         Target.setArch(llvm::Triple::ppc);
1705     } else {
1706       if (Target.getArch() == llvm::Triple::x86)
1707         Target.setArch(llvm::Triple::x86_64);
1708       if (Target.getArch() == llvm::Triple::ppc)
1709         Target.setArch(llvm::Triple::ppc64);
1710     }
1711   }
1712 
1713   return Target;
1714 }
1715 
1716 const ToolChain &Driver::getToolChain(const ArgList &Args,
1717                                       StringRef DarwinArchName) const {
1718   llvm::Triple Target = computeTargetTriple(DefaultTargetTriple, Args,
1719                                             DarwinArchName);
1720 
1721   ToolChain *&TC = ToolChains[Target.str()];
1722   if (!TC) {
1723     switch (Target.getOS()) {
1724     case llvm::Triple::AuroraUX:
1725       TC = new toolchains::AuroraUX(*this, Target, Args);
1726       break;
1727     case llvm::Triple::Darwin:
1728     case llvm::Triple::MacOSX:
1729     case llvm::Triple::IOS:
1730       if (Target.getArch() == llvm::Triple::x86 ||
1731           Target.getArch() == llvm::Triple::x86_64 ||
1732           Target.getArch() == llvm::Triple::arm ||
1733           Target.getArch() == llvm::Triple::thumb)
1734         TC = new toolchains::DarwinClang(*this, Target);
1735       else
1736         TC = new toolchains::Darwin_Generic_GCC(*this, Target, Args);
1737       break;
1738     case llvm::Triple::DragonFly:
1739       TC = new toolchains::DragonFly(*this, Target, Args);
1740       break;
1741     case llvm::Triple::OpenBSD:
1742       TC = new toolchains::OpenBSD(*this, Target, Args);
1743       break;
1744     case llvm::Triple::NetBSD:
1745       TC = new toolchains::NetBSD(*this, Target, Args);
1746       break;
1747     case llvm::Triple::FreeBSD:
1748       TC = new toolchains::FreeBSD(*this, Target, Args);
1749       break;
1750     case llvm::Triple::Minix:
1751       TC = new toolchains::Minix(*this, Target, Args);
1752       break;
1753     case llvm::Triple::Linux:
1754       if (Target.getArch() == llvm::Triple::hexagon)
1755         TC = new toolchains::Hexagon_TC(*this, Target);
1756       else
1757         TC = new toolchains::Linux(*this, Target, Args);
1758       break;
1759     case llvm::Triple::Solaris:
1760       TC = new toolchains::Solaris(*this, Target, Args);
1761       break;
1762     case llvm::Triple::Win32:
1763       TC = new toolchains::Windows(*this, Target);
1764       break;
1765     case llvm::Triple::MinGW32:
1766       // FIXME: We need a MinGW toolchain. Fallthrough for now.
1767     default:
1768       // TCE is an OSless target
1769       if (Target.getArchName() == "tce") {
1770         TC = new toolchains::TCEToolChain(*this, Target);
1771         break;
1772       }
1773 
1774       TC = new toolchains::Generic_GCC(*this, Target, Args);
1775       break;
1776     }
1777   }
1778   return *TC;
1779 }
1780 
1781 bool Driver::ShouldUseClangCompiler(const Compilation &C, const JobAction &JA,
1782                                     const llvm::Triple &Triple) const {
1783   // Check if user requested no clang, or clang doesn't understand this type (we
1784   // only handle single inputs for now).
1785   if (!CCCUseClang || JA.size() != 1 ||
1786       !types::isAcceptedByClang((*JA.begin())->getType()))
1787     return false;
1788 
1789   // Otherwise make sure this is an action clang understands.
1790   if (isa<PreprocessJobAction>(JA)) {
1791     if (!CCCUseClangCPP) {
1792       Diag(clang::diag::warn_drv_not_using_clang_cpp);
1793       return false;
1794     }
1795   } else if (!isa<PrecompileJobAction>(JA) && !isa<CompileJobAction>(JA))
1796     return false;
1797 
1798   // Use clang for C++?
1799   if (!CCCUseClangCXX && types::isCXX((*JA.begin())->getType())) {
1800     Diag(clang::diag::warn_drv_not_using_clang_cxx);
1801     return false;
1802   }
1803 
1804   // Always use clang for precompiling, AST generation, and rewriting,
1805   // regardless of archs.
1806   if (isa<PrecompileJobAction>(JA) ||
1807       types::isOnlyAcceptedByClang(JA.getType()))
1808     return true;
1809 
1810   // Finally, don't use clang if this isn't one of the user specified archs to
1811   // build.
1812   if (!CCCClangArchs.empty() && !CCCClangArchs.count(Triple.getArch())) {
1813     Diag(clang::diag::warn_drv_not_using_clang_arch) << Triple.getArchName();
1814     return false;
1815   }
1816 
1817   return true;
1818 }
1819 
1820 /// GetReleaseVersion - Parse (([0-9]+)(.([0-9]+)(.([0-9]+)?))?)? and return the
1821 /// grouped values as integers. Numbers which are not provided are set to 0.
1822 ///
1823 /// \return True if the entire string was parsed (9.2), or all groups were
1824 /// parsed (10.3.5extrastuff).
1825 bool Driver::GetReleaseVersion(const char *Str, unsigned &Major,
1826                                unsigned &Minor, unsigned &Micro,
1827                                bool &HadExtra) {
1828   HadExtra = false;
1829 
1830   Major = Minor = Micro = 0;
1831   if (*Str == '\0')
1832     return true;
1833 
1834   char *End;
1835   Major = (unsigned) strtol(Str, &End, 10);
1836   if (*Str != '\0' && *End == '\0')
1837     return true;
1838   if (*End != '.')
1839     return false;
1840 
1841   Str = End+1;
1842   Minor = (unsigned) strtol(Str, &End, 10);
1843   if (*Str != '\0' && *End == '\0')
1844     return true;
1845   if (*End != '.')
1846     return false;
1847 
1848   Str = End+1;
1849   Micro = (unsigned) strtol(Str, &End, 10);
1850   if (*Str != '\0' && *End == '\0')
1851     return true;
1852   if (Str == End)
1853     return false;
1854   HadExtra = true;
1855   return true;
1856 }
1857