diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 30 | 
1 files changed, 19 insertions, 11 deletions
| diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 665a3aa24cb..52c22b13a4a 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1081,8 +1081,17 @@ static void addExceptionArgs(const ArgList &Args, types::ID InputType,                               bool KernelOrKext, bool IsRewriter,                               unsigned objcABIVersion,                               ArgStringList &CmdArgs) { -  if (KernelOrKext) +  if (KernelOrKext) { +    // -mkernel and -fapple-kext imply no exceptions, so claim exception related +    // arguments now to avoid warnings about unused arguments. +    Args.ClaimAllArgs(options::OPT_fexceptions); +    Args.ClaimAllArgs(options::OPT_fno_exceptions); +    Args.ClaimAllArgs(options::OPT_fobjc_exceptions); +    Args.ClaimAllArgs(options::OPT_fno_objc_exceptions); +    Args.ClaimAllArgs(options::OPT_fcxx_exceptions); +    Args.ClaimAllArgs(options::OPT_fno_cxx_exceptions);      return; +  }    // Exceptions are enabled by default.    bool ExceptionsEnabled = true; @@ -1965,9 +1974,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,    Args.AddLastArg(CmdArgs, options::OPT_fvisibility_inlines_hidden);    // -fhosted is default. -  if (KernelOrKext || Args.hasFlag(options::OPT_ffreestanding, -                                   options::OPT_fhosted, -                                   false)) +  if (Args.hasFlag(options::OPT_ffreestanding, options::OPT_fhosted, false) || +      KernelOrKext)      CmdArgs.push_back("-ffreestanding");    // Forward -f (flag) options which we can pass directly. @@ -2123,8 +2131,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,      CmdArgs.push_back("-fno-elide-constructors");    // -frtti is default. -  if (KernelOrKext || -      !Args.hasFlag(options::OPT_frtti, options::OPT_fno_rtti)) +  if (!Args.hasFlag(options::OPT_frtti, options::OPT_fno_rtti) || +      KernelOrKext)      CmdArgs.push_back("-fno-rtti");    // -fshort-enums=0 is default for all architectures except Hexagon. @@ -2145,12 +2153,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,      CmdArgs.push_back("-fno-threadsafe-statics");    // -fuse-cxa-atexit is default. -  if (KernelOrKext || -    !Args.hasFlag(options::OPT_fuse_cxa_atexit, options::OPT_fno_use_cxa_atexit, -                  getToolChain().getTriple().getOS() != llvm::Triple::Cygwin && +  if (!Args.hasFlag(options::OPT_fuse_cxa_atexit, +                    options::OPT_fno_use_cxa_atexit, +                   getToolChain().getTriple().getOS() != llvm::Triple::Cygwin &&                    getToolChain().getTriple().getOS() != llvm::Triple::MinGW32 && -                  getToolChain().getTriple().getArch() != -                  llvm::Triple::hexagon)) +              getToolChain().getTriple().getArch() != llvm::Triple::hexagon) || +      KernelOrKext)      CmdArgs.push_back("-fno-use-cxa-atexit");    // -fms-extensions=0 is default. | 

