diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/Driver/ToolChain.h | 3 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChain.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 14 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains.h | 2 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 5 |
5 files changed, 26 insertions, 0 deletions
diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h index a43ee107512..953229c0bdf 100644 --- a/clang/include/clang/Driver/ToolChain.h +++ b/clang/include/clang/Driver/ToolChain.h @@ -283,6 +283,9 @@ public: virtual void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const; + /// \brief Add warning options that need to be passed to cc1 for this target. + virtual void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const; + // GetRuntimeLibType - Determine the runtime library type to use with the // given compilation arguments. virtual RuntimeLibType diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 6172296b630..d164edd7347 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -250,6 +250,8 @@ void ToolChain::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args) const { } +void ToolChain::addClangWarningOptions(ArgStringList &CC1Args) const {} + ToolChain::RuntimeLibType ToolChain::GetRuntimeLibType( const ArgList &Args) const { diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index 4bb8332ea7d..3cf3311de5b 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -242,6 +242,20 @@ DarwinClang::DarwinClang(const Driver &D, const llvm::Triple& Triple, getProgramPaths().push_back(getDriver().Dir); } +void DarwinClang::addClangWarningOptions(ArgStringList &CC1Args) const { + // For iOS, 64-bit, promote certain warnings to errors. + if (!isTargetMacOS() && getTriple().isArch64Bit()) { + // Always enable -Wdeprecated-objc-isa-usage and promote it + // to an error. + CC1Args.push_back("-Wdeprecated-objc-isa-usage"); + CC1Args.push_back("-Werror=deprecated-objc-isa-usage"); + + // Also error about implicit function declarations, as that + // can impact calling conventions. + CC1Args.push_back("-Werror=implicit-function-declaration"); + } +} + /// \brief Determine whether Objective-C automated reference counting is /// enabled. static bool isObjCAutoRefCount(const ArgList &Args) { diff --git a/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h index 529dcbed787..ef90c2ab68d 100644 --- a/clang/lib/Driver/ToolChains.h +++ b/clang/lib/Driver/ToolChains.h @@ -488,6 +488,8 @@ public: AddCCKextLibArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const override; + virtual void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const; + void AddLinkARCArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const override; diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 9a31eb9f9d6..0c397584d93 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -2116,6 +2116,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, std::string TripleStr = getToolChain().ComputeEffectiveClangTriple(Args); CmdArgs.push_back(Args.MakeArgString(TripleStr)); + // Push all default warning arguments that are specific to + // the given target. These come before user provided warning options + // are provided. + getToolChain().addClangWarningOptions(CmdArgs); + // Select the appropriate action. RewriteKind rewriteKind = RK_None; |

