diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Driver/ToolChain.cpp | 3 | ||||
-rw-r--r-- | lib/Driver/ToolChains.cpp | 11 | ||||
-rw-r--r-- | lib/Driver/ToolChains.h | 3 | ||||
-rw-r--r-- | lib/Driver/Tools.cpp | 2 |
4 files changed, 13 insertions, 6 deletions
diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp index de8ed1d1c5..8907b2ba97 100644 --- a/lib/Driver/ToolChain.cpp +++ b/lib/Driver/ToolChain.cpp @@ -197,7 +197,8 @@ void ToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, // Each toolchain should provide the appropriate include flags. } -void ToolChain::addClangTargetOptions(ArgStringList &CC1Args) const { +void ToolChain::addClangTargetOptions(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { } ToolChain::RuntimeLibType ToolChain::GetRuntimeLibType( diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 94e3012329..118bf26d37 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -2230,10 +2230,15 @@ Tool &Linux::SelectTool(const Compilation &C, const JobAction &JA, return *T; } -void Linux::addClangTargetOptions(ArgStringList &CC1Args) const { +void Linux::addClangTargetOptions(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { const Generic_GCC::GCCVersion &V = GCCInstallation.getVersion(); - if (V >= Generic_GCC::GCCVersion::Parse("4.7.0") || - getTriple().getEnvironment() == llvm::Triple::Android) + bool UseInitArrayDefault + = V >= Generic_GCC::GCCVersion::Parse("4.7.0") || + getTriple().getEnvironment() == llvm::Triple::Android; + if (DriverArgs.hasFlag(options::OPT_fuse_init_array, + options::OPT_fno_use_init_array, + UseInitArrayDefault)) CC1Args.push_back("-fuse-init-array"); } diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h index 337ef20074..0b86b86b9c 100644 --- a/lib/Driver/ToolChains.h +++ b/lib/Driver/ToolChains.h @@ -511,7 +511,8 @@ public: virtual void AddClangSystemIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const; - virtual void addClangTargetOptions(ArgStringList &CC1Args) const; + virtual void addClangTargetOptions(const ArgList &DriverArgs, + ArgStringList &CC1Args) const; virtual void AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 5f483bd123..32ae8d1b6e 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -2047,7 +2047,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, AsynchronousUnwindTables)) CmdArgs.push_back("-munwind-tables"); - getToolChain().addClangTargetOptions(CmdArgs); + getToolChain().addClangTargetOptions(Args, CmdArgs); if (Arg *A = Args.getLastArg(options::OPT_flimited_precision_EQ)) { CmdArgs.push_back("-mlimit-float-precision"); |