From: Anders Carlsson Date: Mon, 28 Feb 2011 00:44:51 +0000 (+0000) Subject: Factor code out into a helper function, shouldUseExceptionTablesForObjCExceptions. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=525544de0835d5ee7497f4897e255727b162e0aa;p=clang Factor code out into a helper function, shouldUseExceptionTablesForObjCExceptions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126601 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 9f4a0bc162..ef869f1ecf 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -762,6 +762,24 @@ void Clang::AddX86TargetArgs(const ArgList &Args, } } +static bool +shouldUseExceptionTablesForObjCExceptions(const ArgList &Args, + const llvm::Triple &Triple) { + // We use the zero-cost exception tables for Objective-C if the non-fragile + // ABI is enabled or when compiling for x86_64 and ARM on Snow Leopard and + // later. + + if (Args.hasArg(options::OPT_fobjc_nonfragile_abi)) + return true; + + if (Triple.getOS() != llvm::Triple::Darwin) + return false; + + return (Triple.getDarwinMajorNumber() >= 9 && + (Triple.getArch() == llvm::Triple::x86_64 || + Triple.getArch() == llvm::Triple::arm)); +} + static bool needsExceptions(const ArgList &Args, types::ID InputType, const llvm::Triple &Triple) { // Handle -fno-exceptions. @@ -777,17 +795,8 @@ static bool needsExceptions(const ArgList &Args, types::ID InputType, if (types::isCXX(InputType)) return true; - // As do Objective-C non-fragile ABI inputs and all Objective-C inputs on - // x86_64 and ARM after SnowLeopard. - if (types::isObjC(InputType)) { - if (Args.hasArg(options::OPT_fobjc_nonfragile_abi)) - return true; - if (Triple.getOS() != llvm::Triple::Darwin) - return false; - return (Triple.getDarwinMajorNumber() >= 9 && - (Triple.getArch() == llvm::Triple::x86_64 || - Triple.getArch() == llvm::Triple::arm)); - } + if (types::isObjC(InputType)) + return shouldUseExceptionTablesForObjCExceptions(Args, Triple); return false; }