]> granicus.if.org Git - clang/commitdiff
Factor code out into a helper function, shouldUseExceptionTablesForObjCExceptions.
authorAnders Carlsson <andersca@mac.com>
Mon, 28 Feb 2011 00:44:51 +0000 (00:44 +0000)
committerAnders Carlsson <andersca@mac.com>
Mon, 28 Feb 2011 00:44:51 +0000 (00:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126601 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/Tools.cpp

index 9f4a0bc162e3556bc607a277994a81ad22c9220a..ef869f1ecf237423a8f6dee0ef3384773a442555 100644 (file)
@@ -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;
 }