summaryrefslogtreecommitdiffstats
path: root/lib/Driver
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Driver')
-rw-r--r--lib/Driver/Driver.cpp217
-rw-r--r--lib/Driver/DriverOptions.cpp2
-rw-r--r--lib/Driver/Job.cpp9
-rw-r--r--lib/Driver/OptTable.cpp122
-rw-r--r--lib/Driver/ToolChains.cpp2
-rw-r--r--lib/Driver/Tools.cpp77
-rw-r--r--lib/Driver/Types.cpp4
7 files changed, 229 insertions, 204 deletions
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index 87357cf..dbe7bd9 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -41,9 +41,9 @@ using namespace clang;
// Used to set values for "production" clang, for releases.
// #define USE_PRODUCTION_CLANG
-Driver::Driver(const char *_Name, const char *_Dir,
- const char *_DefaultHostTriple,
- const char *_DefaultImageName,
+Driver::Driver(llvm::StringRef _Name, llvm::StringRef _Dir,
+ llvm::StringRef _DefaultHostTriple,
+ llvm::StringRef _DefaultImageName,
bool IsProduction, Diagnostic &_Diags)
: Opts(createDriverOptTable()), Diags(_Diags),
Name(_Name), Dir(_Dir), DefaultHostTriple(_DefaultHostTriple),
@@ -113,81 +113,57 @@ Compilation *Driver::BuildCompilation(int argc, const char **argv) {
const char **Start = argv + 1, **End = argv + argc;
const char *HostTriple = DefaultHostTriple.c_str();
- // Read -ccc args.
+ InputArgList *Args = ParseArgStrings(Start, End);
+
+ // -no-canonical-prefixes is used very early in main.
+ Args->ClaimAllArgs(options::OPT_no_canonical_prefixes);
+
+ // Extract -ccc args.
//
// FIXME: We need to figure out where this behavior should live. Most of it
// should be outside in the client; the parts that aren't should have proper
// options, either by introducing new ones or by overloading gcc ones like -V
// or -b.
- for (; Start != End && memcmp(*Start, "-ccc-", 5) == 0; ++Start) {
- const char *Opt = *Start + 5;
-
- if (!strcmp(Opt, "print-options")) {
- CCCPrintOptions = true;
- } else if (!strcmp(Opt, "print-phases")) {
- CCCPrintActions = true;
- } else if (!strcmp(Opt, "print-bindings")) {
- CCCPrintBindings = true;
- } else if (!strcmp(Opt, "cxx")) {
- CCCIsCXX = true;
- } else if (!strcmp(Opt, "echo")) {
- CCCEcho = true;
-
- } else if (!strcmp(Opt, "gcc-name")) {
- assert(Start+1 < End && "FIXME: -ccc- argument handling.");
- CCCGenericGCCName = *++Start;
-
- } else if (!strcmp(Opt, "clang-cxx")) {
- CCCUseClangCXX = true;
- } else if (!strcmp(Opt, "no-clang-cxx")) {
- CCCUseClangCXX = false;
- } else if (!strcmp(Opt, "pch-is-pch")) {
- CCCUsePCH = true;
- } else if (!strcmp(Opt, "pch-is-pth")) {
- CCCUsePCH = false;
- } else if (!strcmp(Opt, "no-clang")) {
- CCCUseClang = false;
- } else if (!strcmp(Opt, "no-clang-cpp")) {
- CCCUseClangCPP = false;
- } else if (!strcmp(Opt, "clang-archs")) {
- assert(Start+1 < End && "FIXME: -ccc- argument handling.");
- llvm::StringRef Cur = *++Start;
-
- CCCClangArchs.clear();
- while (!Cur.empty()) {
- std::pair<llvm::StringRef, llvm::StringRef> Split = Cur.split(',');
-
- if (!Split.first.empty()) {
- llvm::Triple::ArchType Arch =
- llvm::Triple(Split.first, "", "").getArch();
-
- if (Arch == llvm::Triple::UnknownArch) {
- // FIXME: Error handling.
- llvm::errs() << "invalid arch name: " << Split.first << "\n";
- exit(1);
- }
-
- CCCClangArchs.insert(Arch);
+ CCCPrintOptions = Args->hasArg(options::OPT_ccc_print_options);
+ CCCPrintActions = Args->hasArg(options::OPT_ccc_print_phases);
+ CCCPrintBindings = Args->hasArg(options::OPT_ccc_print_bindings);
+ CCCIsCXX = Args->hasArg(options::OPT_ccc_cxx) || CCCIsCXX;
+ CCCEcho = Args->hasArg(options::OPT_ccc_echo);
+ if (const Arg *A = Args->getLastArg(options::OPT_ccc_gcc_name))
+ CCCGenericGCCName = A->getValue(*Args);
+ CCCUseClangCXX = Args->hasFlag(options::OPT_ccc_clang_cxx,
+ options::OPT_ccc_no_clang_cxx,
+ CCCUseClangCXX);
+ CCCUsePCH = Args->hasFlag(options::OPT_ccc_pch_is_pch,
+ options::OPT_ccc_pch_is_pth);
+ CCCUseClang = !Args->hasArg(options::OPT_ccc_no_clang);
+ CCCUseClangCPP = !Args->hasArg(options::OPT_ccc_no_clang_cpp);
+ if (const Arg *A = Args->getLastArg(options::OPT_ccc_clang_archs)) {
+ llvm::StringRef Cur = A->getValue(*Args);
+
+ CCCClangArchs.clear();
+ while (!Cur.empty()) {
+ std::pair<llvm::StringRef, llvm::StringRef> Split = Cur.split(',');
+
+ if (!Split.first.empty()) {
+ llvm::Triple::ArchType Arch =
+ llvm::Triple(Split.first, "", "").getArch();
+
+ if (Arch == llvm::Triple::UnknownArch) {
+ Diag(clang::diag::err_drv_invalid_arch_name) << Arch;
+ continue;
}
- Cur = Split.second;
+ CCCClangArchs.insert(Arch);
}
- } else if (!strcmp(Opt, "host-triple")) {
- assert(Start+1 < End && "FIXME: -ccc- argument handling.");
- HostTriple = *++Start;
- } else if (!strcmp(Opt, "install-dir")) {
- assert(Start+1 < End && "FIXME: -ccc- argument handling.");
- Dir = *++Start;
-
- } else {
- // FIXME: Error handling.
- llvm::errs() << "invalid option: " << *Start << "\n";
- exit(1);
+ Cur = Split.second;
}
}
-
- InputArgList *Args = ParseArgStrings(Start, End);
+ if (const Arg *A = Args->getLastArg(options::OPT_ccc_host_triple))
+ HostTriple = A->getValue(*Args);
+ if (const Arg *A = Args->getLastArg(options::OPT_ccc_install_dir))
+ Dir = A->getValue(*Args);
Host = GetHostInfo(HostTriple);
@@ -287,110 +263,11 @@ void Driver::PrintOptions(const ArgList &Args) const {
}
}
-static std::string getOptionHelpName(const OptTable &Opts, options::ID Id) {
- std::string Name = Opts.getOptionName(Id);
-
- // Add metavar, if used.
- switch (Opts.getOptionKind(Id)) {
- case Option::GroupClass: case Option::InputClass: case Option::UnknownClass:
- assert(0 && "Invalid option with help text.");
-
- case Option::MultiArgClass: case Option::JoinedAndSeparateClass:
- assert(0 && "Cannot print metavar for this kind of option.");
-
- case Option::FlagClass:
- break;
-
- case Option::SeparateClass: case Option::JoinedOrSeparateClass:
- Name += ' ';
- // FALLTHROUGH
- case Option::JoinedClass: case Option::CommaJoinedClass:
- Name += Opts.getOptionMetaVar(Id);
- break;
- }
-
- return Name;
-}
-
+// FIXME: Move -ccc options to real options in the .td file (or eliminate), and
+// then move to using OptTable::PrintHelp.
void Driver::PrintHelp(bool ShowHidden) const {
- llvm::raw_ostream &OS = llvm::outs();
-
- OS << "OVERVIEW: clang \"gcc-compatible\" driver\n";
- OS << '\n';
- OS << "USAGE: " << Name << " [options] <input files>\n";
- OS << '\n';
- OS << "OPTIONS:\n";
-
- // Render help text into (option, help) pairs.
- std::vector< std::pair<std::string, const char*> > OptionHelp;
-
- for (unsigned i = 0, e = getOpts().getNumOptions(); i != e; ++i) {
- options::ID Id = (options::ID) (i + 1);
- if (const char *Text = getOpts().getOptionHelpText(Id))
- OptionHelp.push_back(std::make_pair(getOptionHelpName(getOpts(), Id),
- Text));
- }
-
- if (ShowHidden) {
- OptionHelp.push_back(std::make_pair("\nDRIVER OPTIONS:",""));
- OptionHelp.push_back(std::make_pair("-ccc-cxx",
- "Act as a C++ driver"));
- OptionHelp.push_back(std::make_pair("-ccc-gcc-name",
- "Name for native GCC compiler"));
- OptionHelp.push_back(std::make_pair("-ccc-clang-cxx",
- "Enable the clang compiler for C++"));
- OptionHelp.push_back(std::make_pair("-ccc-no-clang-cxx",
- "Disable the clang compiler for C++"));
- OptionHelp.push_back(std::make_pair("-ccc-no-clang",
- "Disable the clang compiler"));
- OptionHelp.push_back(std::make_pair("-ccc-no-clang-cpp",
- "Disable the clang preprocessor"));
- OptionHelp.push_back(std::make_pair("-ccc-clang-archs",
- "Comma separate list of architectures "
- "to use the clang compiler for"));
- OptionHelp.push_back(std::make_pair("-ccc-pch-is-pch",
- "Use lazy PCH for precompiled headers"));
- OptionHelp.push_back(std::make_pair("-ccc-pch-is-pth",
- "Use pretokenized headers for precompiled headers"));
-
- OptionHelp.push_back(std::make_pair("\nDEBUG/DEVELOPMENT OPTIONS:",""));
- OptionHelp.push_back(std::make_pair("-ccc-host-triple",
- "Simulate running on the given target"));
- OptionHelp.push_back(std::make_pair("-ccc-install-dir",
- "Simulate installation in the given directory"));
- OptionHelp.push_back(std::make_pair("-ccc-print-options",
- "Dump parsed command line arguments"));
- OptionHelp.push_back(std::make_pair("-ccc-print-phases",
- "Dump list of actions to perform"));
- OptionHelp.push_back(std::make_pair("-ccc-print-bindings",
- "Show bindings of tools to actions"));
- OptionHelp.push_back(std::make_pair("CCC_ADD_ARGS",
- "(ENVIRONMENT VARIABLE) Comma separated list of "
- "arguments to prepend to the command line"));
- }
-
- // Find the maximum option length.
- unsigned OptionFieldWidth = 0;
- for (unsigned i = 0, e = OptionHelp.size(); i != e; ++i) {
- // Skip titles.
- if (!OptionHelp[i].second)
- continue;
-
- // Limit the amount of padding we are willing to give up for alignment.
- unsigned Length = OptionHelp[i].first.size();
- if (Length <= 23)
- OptionFieldWidth = std::max(OptionFieldWidth, Length);
- }
-
- for (unsigned i = 0, e = OptionHelp.size(); i != e; ++i) {
- const std::string &Option = OptionHelp[i].first;
- OS << " " << Option;
- for (int j = Option.length(), e = OptionFieldWidth; j < e; ++j)
- OS << ' ';
- OS << ' ' << OptionHelp[i].second << '\n';
- }
-
- OS.flush();
+ getOpts().PrintHelp(llvm::outs(), Name.c_str(),
+ "clang \"gcc-compatible\" driver", ShowHidden);
}
void Driver::PrintVersion(const Compilation &C, llvm::raw_ostream &OS) const {
diff --git a/lib/Driver/DriverOptions.cpp b/lib/Driver/DriverOptions.cpp
index d1af95c..72aaf56 100644
--- a/lib/Driver/DriverOptions.cpp
+++ b/lib/Driver/DriverOptions.cpp
@@ -14,7 +14,7 @@
using namespace clang::driver;
using namespace clang::driver::options;
-static OptTable::Info InfoTable[] = {
+static const OptTable::Info InfoTable[] = {
#define OPTION(NAME, ID, KIND, GROUP, ALIAS, FLAGS, PARAM, \
HELPTEXT, METAVAR) \
{ NAME, HELPTEXT, METAVAR, Option::KIND##Class, FLAGS, PARAM, \
diff --git a/lib/Driver/Job.cpp b/lib/Driver/Job.cpp
index 280e7c4..1bd123e 100644
--- a/lib/Driver/Job.cpp
+++ b/lib/Driver/Job.cpp
@@ -14,10 +14,11 @@ using namespace clang::driver;
Job::~Job() {}
-Command::Command(const Action &_Source, const char *_Executable,
- const ArgStringList &_Arguments)
- : Job(CommandClass), Source(_Source), Executable(_Executable),
- Arguments(_Arguments) {
+Command::Command(const Action &_Source, const Tool &_Creator,
+ const char *_Executable, const ArgStringList &_Arguments)
+ : Job(CommandClass), Source(_Source), Creator(_Creator),
+ Executable(_Executable), Arguments(_Arguments)
+{
}
PipedJob::PipedJob() : Job(PipedJobClass) {}
diff --git a/lib/Driver/OptTable.cpp b/lib/Driver/OptTable.cpp
index f68a1d8..f69d5d8 100644
--- a/lib/Driver/OptTable.cpp
+++ b/lib/Driver/OptTable.cpp
@@ -11,9 +11,10 @@
#include "clang/Driver/Arg.h"
#include "clang/Driver/ArgList.h"
#include "clang/Driver/Option.h"
+#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
-
+#include <map>
using namespace clang::driver;
using namespace clang::driver::options;
@@ -255,3 +256,122 @@ InputArgList *OptTable::ParseArgs(const char **ArgBegin, const char **ArgEnd,
return Args;
}
+
+static std::string getOptionHelpName(const OptTable &Opts, OptSpecifier Id) {
+ std::string Name = Opts.getOptionName(Id);
+
+ // Add metavar, if used.
+ switch (Opts.getOptionKind(Id)) {
+ case Option::GroupClass: case Option::InputClass: case Option::UnknownClass:
+ assert(0 && "Invalid option with help text.");
+
+ case Option::MultiArgClass: case Option::JoinedAndSeparateClass:
+ assert(0 && "Cannot print metavar for this kind of option.");
+
+ case Option::FlagClass:
+ break;
+
+ case Option::SeparateClass: case Option::JoinedOrSeparateClass:
+ Name += ' ';
+ // FALLTHROUGH
+ case Option::JoinedClass: case Option::CommaJoinedClass:
+ if (const char *MetaVarName = Opts.getOptionMetaVar(Id))
+ Name += MetaVarName;
+ else
+ Name += "<value>";
+ break;
+ }
+
+ return Name;
+}
+
+static void PrintHelpOptionList(llvm::raw_ostream &OS, llvm::StringRef Title,
+ std::vector<std::pair<std::string,
+ const char*> > &OptionHelp) {
+ OS << Title << ":\n";
+
+ // Find the maximum option length.
+ unsigned OptionFieldWidth = 0;
+ for (unsigned i = 0, e = OptionHelp.size(); i != e; ++i) {
+ // Skip titles.
+ if (!OptionHelp[i].second)
+ continue;
+
+ // Limit the amount of padding we are willing to give up for alignment.
+ unsigned Length = OptionHelp[i].first.size();
+ if (Length <= 23)
+ OptionFieldWidth = std::max(OptionFieldWidth, Length);
+ }
+
+ const unsigned InitialPad = 2;
+ for (unsigned i = 0, e = OptionHelp.size(); i != e; ++i) {
+ const std::string &Option = OptionHelp[i].first;
+ int Pad = OptionFieldWidth - int(Option.size());
+ OS.indent(InitialPad) << Option;
+
+ // Break on long option names.
+ if (Pad < 0) {
+ OS << "\n";
+ Pad = OptionFieldWidth + InitialPad;
+ }
+ OS.indent(Pad + 1) << OptionHelp[i].second << '\n';
+ }
+}
+
+static const char *getOptionHelpGroup(const OptTable &Opts, OptSpecifier Id) {
+ unsigned GroupID = Opts.getOptionGroupID(Id);
+
+ // If not in a group, return the default help group.
+ if (!GroupID)
+ return "OPTIONS";
+
+ // Abuse the help text of the option groups to store the "help group"
+ // name.
+ //
+ // FIXME: Split out option groups.
+ if (const char *GroupHelp = Opts.getOptionHelpText(GroupID))
+ return GroupHelp;
+
+ // Otherwise keep looking.
+ return getOptionHelpGroup(Opts, GroupID);
+}
+
+void OptTable::PrintHelp(llvm::raw_ostream &OS, const char *Name,
+ const char *Title, bool ShowHidden) const {
+ OS << "OVERVIEW: " << Title << "\n";
+ OS << '\n';
+ OS << "USAGE: " << Name << " [options] <inputs>\n";
+ OS << '\n';
+
+ // Render help text into a map of group-name to a list of (option, help)
+ // pairs.
+ typedef std::map<std::string,
+ std::vector<std::pair<std::string, const char*> > > helpmap_ty;
+ helpmap_ty GroupedOptionHelp;
+
+ for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
+ unsigned Id = i + 1;
+
+ // FIXME: Split out option groups.
+ if (getOptionKind(Id) == Option::GroupClass)
+ continue;
+
+ if (!ShowHidden && isOptionHelpHidden(Id))
+ continue;
+
+ if (const char *Text = getOptionHelpText(Id)) {
+ const char *HelpGroup = getOptionHelpGroup(*this, Id);
+ const std::string &OptName = getOptionHelpName(*this, Id);
+ GroupedOptionHelp[HelpGroup].push_back(std::make_pair(OptName, Text));
+ }
+ }
+
+ for (helpmap_ty::iterator it = GroupedOptionHelp .begin(),
+ ie = GroupedOptionHelp.end(); it != ie; ++it) {
+ if (it != GroupedOptionHelp .begin())
+ OS << "\n";
+ PrintHelpOptionList(OS, it->first, it->second);
+ }
+
+ OS.flush();
+}
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
index af63952..420573d 100644
--- a/lib/Driver/ToolChains.cpp
+++ b/lib/Driver/ToolChains.cpp
@@ -510,7 +510,7 @@ DerivedArgList *Darwin::TranslateArgs(InputArgList &Args,
DAL->append(DAL->MakeJoinedArg(0, MArch, "armv7a"));
else
- llvm::llvm_unreachable("invalid Darwin arch");
+ llvm_unreachable("invalid Darwin arch");
}
return DAL;
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index eb165cf..70597ab 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -9,6 +9,7 @@
#include "Tools.h"
+#include "clang/Basic/Version.h"
#include "clang/Driver/Action.h"
#include "clang/Driver/Arg.h"
#include "clang/Driver/ArgList.h"
@@ -419,14 +420,17 @@ void Clang::AddARMTargetArgs(const ArgList &Args,
//
// FIXME: This changes CPP defines, we need -target-soft-float.
CmdArgs.push_back("-msoft-float");
- CmdArgs.push_back("-mfloat-abi=soft");
+ CmdArgs.push_back("-mfloat-abi");
+ CmdArgs.push_back("soft");
} else if (FloatABI == "softfp") {
// Floating point operations are hard, but argument passing is soft.
- CmdArgs.push_back("-mfloat-abi=soft");
+ CmdArgs.push_back("-mfloat-abi");
+ CmdArgs.push_back("soft");
} else {
// Floating point operations and argument passing are hard.
assert(FloatABI == "hard" && "Invalid float abi!");
- CmdArgs.push_back("-mfloat-abi=hard");
+ CmdArgs.push_back("-mfloat-abi");
+ CmdArgs.push_back("hard");
}
}
@@ -590,6 +594,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
assert(Inputs.size() == 1 && "Unable to handle multiple inputs.");
+ // Invoke ourselves in -cc1 mode.
+ //
+ // FIXME: Implement custom jobs for internal actions.
+ CmdArgs.push_back("-cc1");
+
// Add the "effective" target triple.
CmdArgs.push_back("-triple");
std::string TripleStr = getEffectiveClangTriple(D, getToolChain(), Args);
@@ -647,6 +656,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// Enable region store model by default.
CmdArgs.push_back("-analyzer-store=region");
+ // Treat blocks as analysis entry points.
+ CmdArgs.push_back("-analyzer-opt-analyze-nested-blocks");
+
// Add default argument set.
if (!Args.hasArg(options::OPT__analyzer_no_default_checks)) {
CmdArgs.push_back("-warn-dead-stores");
@@ -787,7 +799,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Arg *Unsupported;
if ((Unsupported = Args.getLastArg(options::OPT_MG)) ||
(Unsupported = Args.getLastArg(options::OPT_MQ)) ||
- (Unsupported = Args.getLastArg(options::OPT_iframework)))
+ (Unsupported = Args.getLastArg(options::OPT_iframework)) ||
+ (Unsupported = Args.getLastArg(options::OPT_fshort_enums)))
D.Diag(clang::diag::err_drv_clang_unsupported)
<< Unsupported->getOption().getName();
@@ -803,7 +816,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Args.AddLastArg(CmdArgs, options::OPT_nostdinc);
Args.AddLastArg(CmdArgs, options::OPT_nobuiltininc);
- Args.AddLastArg(CmdArgs, options::OPT_isysroot);
+ // Pass the path to compiler resource files.
+ //
+ // FIXME: Get this from a configuration object.
+ llvm::sys::Path P(D.Dir);
+ P.eraseComponent(); // Remove /bin from foo/bin
+ P.appendComponent("lib");
+ P.appendComponent("clang");
+ P.appendComponent(CLANG_VERSION_STRING);
+ CmdArgs.push_back("-resource-dir");
+ CmdArgs.push_back(Args.MakeArgString(P.str()));
// Add preprocessing options like -I, -D, etc. if we are using the
// preprocessor.
@@ -877,7 +899,13 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back(Args.MakeArgString(llvm::Twine(N)));
}
- // Forward -f options which we can pass directly.
+ if (const Arg *A = Args.getLastArg(options::OPT_fvisibility_EQ)) {
+ CmdArgs.push_back("-fvisibility");
+ CmdArgs.push_back(A->getValue(Args));
+ }
+
+ // Forward -f (flag) options which we can pass directly.
+ Args.AddLastArg(CmdArgs, options::OPT_fcatch_undefined_behavior);
Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls);
Args.AddLastArg(CmdArgs, options::OPT_ffreestanding);
Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
@@ -890,7 +918,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Args.AddLastArg(CmdArgs, options::OPT_fdiagnostics_print_source_range_info);
Args.AddLastArg(CmdArgs, options::OPT_ftime_report);
Args.AddLastArg(CmdArgs, options::OPT_ftrapv);
- Args.AddLastArg(CmdArgs, options::OPT_fvisibility_EQ);
Args.AddLastArg(CmdArgs, options::OPT_fwritable_strings);
Args.AddLastArg(CmdArgs, options::OPT_pthread);
@@ -1027,7 +1054,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// Default to -fno-builtin-str{cat,cpy} on Darwin for ARM.
//
- // FIXME: This is disabled until clang-cc supports -fno-builtin-foo. PR4941.
+ // FIXME: This is disabled until clang -cc1 supports -fno-builtin-foo. PR4941.
#if 0
if (getToolChain().getTriple().getOS() == llvm::Triple::Darwin &&
(getToolChain().getTriple().getArch() == llvm::Triple::arm ||
@@ -1077,8 +1104,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Args.AddAllArgs(CmdArgs, options::OPT_undef);
const char *Exec =
- Args.MakeArgString(getToolChain().GetProgramPath(C, "clang-cc"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Args.MakeArgString(getToolChain().GetProgramPath(C, "clang"));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
// Explicitly warn that these options are unsupported, even though
// we are allowing compilation to continue.
@@ -1200,7 +1227,7 @@ void gcc::Common::ConstructJob(Compilation &C, const JobAction &JA,
getToolChain().getHost().getDriver().CCCGenericGCCName.c_str();
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, GCCName));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
void gcc::Preprocess::RenderExtraToolArgs(ArgStringList &CmdArgs) const {
@@ -1589,7 +1616,7 @@ void darwin::Preprocess::ConstructJob(Compilation &C, const JobAction &JA,
const char *CC1Name = getCC1Name(Inputs[0].getType());
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, CC1Name));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
void darwin::Compile::ConstructJob(Compilation &C, const JobAction &JA,
@@ -1683,7 +1710,7 @@ void darwin::Compile::ConstructJob(Compilation &C, const JobAction &JA,
const char *CC1Name = getCC1Name(Inputs[0].getType());
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, CC1Name));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
void darwin::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
@@ -1738,7 +1765,7 @@ void darwin::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "as"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
/// Helper routine for seeing if we should use dsymutil; this is a
@@ -2152,7 +2179,7 @@ void darwin::Link::ConstructJob(Compilation &C, const JobAction &JA,
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "ld"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
// Find the first non-empty base input (we want to ignore linker
// inputs).
@@ -2182,7 +2209,7 @@ void darwin::Link::ConstructJob(Compilation &C, const JobAction &JA,
Args.MakeArgString(getToolChain().GetProgramPath(C, "dsymutil"));
ArgStringList CmdArgs;
CmdArgs.push_back(Output.getFilename());
- C.getJobs().addCommand(new Command(JA, Exec, CmdArgs));
+ C.getJobs().addCommand(new Command(JA, *this, Exec, CmdArgs));
}
}
}
@@ -2208,7 +2235,7 @@ void darwin::Lipo::ConstructJob(Compilation &C, const JobAction &JA,
}
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "lipo"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
void auroraux::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
@@ -2238,7 +2265,7 @@ void auroraux::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "gas"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
void auroraux::Link::ConstructJob(Compilation &C, const JobAction &JA,
@@ -2339,7 +2366,7 @@ void auroraux::Link::ConstructJob(Compilation &C, const JobAction &JA,
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "ld"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
void openbsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
@@ -2369,7 +2396,7 @@ void openbsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "as"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
void openbsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
@@ -2469,7 +2496,7 @@ void openbsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "ld"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
void freebsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
@@ -2504,7 +2531,7 @@ void freebsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "as"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
void freebsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
@@ -2617,7 +2644,7 @@ void freebsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "ld"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
/// DragonFly Tools
@@ -2656,7 +2683,7 @@ void dragonfly::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "as"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA,
@@ -2780,5 +2807,5 @@ void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA,
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath(C, "ld"));
- Dest.addCommand(new Command(JA, Exec, CmdArgs));
+ Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
diff --git a/lib/Driver/Types.cpp b/lib/Driver/Types.cpp
index 3397677..433af03 100644
--- a/lib/Driver/Types.cpp
+++ b/lib/Driver/Types.cpp
@@ -23,7 +23,7 @@ struct TypeInfo {
ID PreprocessedType;
};
-static TypeInfo TypeInfos[] = {
+static const TypeInfo TypeInfos[] = {
#define TYPE(NAME, ID, PP_TYPE, TEMP_SUFFIX, FLAGS) \
{ NAME, FLAGS, TEMP_SUFFIX, TY_##PP_TYPE, },
#include "clang/Driver/Types.def"
@@ -31,7 +31,7 @@ static TypeInfo TypeInfos[] = {
};
static const unsigned numTypes = sizeof(TypeInfos) / sizeof(TypeInfos[0]);
-static TypeInfo &getInfo(unsigned id) {
+static const TypeInfo &getInfo(unsigned id) {
assert(id > 0 && id - 1 < numTypes && "Invalid Type ID.");
return TypeInfos[id - 1];
}
OpenPOWER on IntegriCloud