From: Fariborz Jahanian Date: Thu, 1 Oct 2009 20:30:46 +0000 (+0000) Subject: Set __EXCEPTIONS by checking on darwin's triple. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=85caf03ee49c4de87ee9624a9b725ef5d20ee624;p=clang Set __EXCEPTIONS by checking on darwin's triple. Patch by Rafael Espindola. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83209 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index ac7df866d7..5fa55f22ac 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -472,7 +472,8 @@ void Clang::AddX86TargetArgs(const ArgList &Args, } } -static bool needsExceptions(const ArgList &Args, types::ID InputType) { +static bool needsExceptions(const ArgList &Args, types::ID InputType, + const llvm::Triple &Triple) { if (Arg *A = Args.getLastArg(options::OPT_fexceptions, options::OPT_fno_exceptions)) { if (A->getOption().matches(options::OPT_fexceptions)) @@ -486,12 +487,16 @@ static bool needsExceptions(const ArgList &Args, types::ID InputType) { case types::TY_ObjCXX: case types::TY_ObjCXXHeader: case types::TY_PP_ObjCXX: case types::TY_PP_ObjCXXHeader: return true; + case types::TY_ObjC: case types::TY_ObjCHeader: case types::TY_PP_ObjC: case types::TY_PP_ObjCHeader: if (Args.hasArg(options::OPT_fobjc_nonfragile_abi)) return true; - else + if (Triple.getOS() != llvm::Triple::Darwin) return false; + return (Triple.getDarwinMajorNumber() >= 9 && + Triple.getArch() == llvm::Triple::x86_64); + default: return false; } @@ -833,7 +838,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-fblocks=0"); } - if (needsExceptions(Args, InputType)) + if (needsExceptions(Args, InputType, getToolChain().getTriple())) CmdArgs.push_back("-fexceptions"); else CmdArgs.push_back("-fexceptions=0");