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