r223455 - Driver: Objective-C should respect -fno-exceptions

David Majnemer david.majnemer at gmail.com
Mon Dec 8 16:18:09 PST 2014


On Fri, Dec 5, 2014 at 5:12 PM, Nico Weber <thakis at chromium.org> wrote:

> On Fri, Dec 5, 2014 at 1:00 PM, David Majnemer <david.majnemer at gmail.com>
> wrote:
>
>>
>>
>> On Fri, Dec 5, 2014 at 12:37 PM, Nico Weber <thakis at chromium.org> wrote:
>>
>>> On Fri, Dec 5, 2014 at 11:55 AM, David Majnemer <
>>> david.majnemer at gmail.com> wrote:
>>>
>>>>
>>>>
>>>> On Fri, Dec 5, 2014 at 11:47 AM, Nico Weber <thakis at chromium.org>
>>>> wrote:
>>>>
>>>>> On Fri, Dec 5, 2014 at 11:41 AM, David Majnemer <
>>>>> david.majnemer at gmail.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Dec 5, 2014 at 11:25 AM, Nico Weber <thakis at chromium.org>
>>>>>> wrote:
>>>>>>
>>>>>>> On Fri, Dec 5, 2014 at 12:56 AM, David Majnemer <
>>>>>>> david.majnemer at gmail.com> wrote:
>>>>>>>
>>>>>>>> Author: majnemer
>>>>>>>> Date: Fri Dec  5 02:56:55 2014
>>>>>>>> New Revision: 223455
>>>>>>>>
>>>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=223455&view=rev
>>>>>>>> Log:
>>>>>>>> Driver: Objective-C should respect -fno-exceptions
>>>>>>>>
>>>>>>>> Clang attempted to replicate a GCC bug: -fobjc-exceptions forces
>>>>>>>> -fexceptions to be enabled.  However, this has unintended effects
>>>>>>>> and
>>>>>>>> other awkard side effects that Clang doesn't "correctly" ape (e.g.
>>>>>>>> it's
>>>>>>>> impossible to turn off C++ exceptions in ObjC++ mode
>>>>>>>
>>>>>>>
>>>>>>> What does "impossible to turn off exceptions" mean here?
>>>>>>>
>>>>>>> $ clang -c test.mm -fno-exceptions
>>>>>>> test.mm:2:3: error: cannot use 'try' with exceptions disabled
>>>>>>>   try {} catch (...) {}
>>>>>>>   ^
>>>>>>> 1 error generated.
>>>>>>>
>>>>>>
>>>>>> You should try that with GCC, not clang :)
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> ).
>>>>>>>>
>>>>>>>> Instead, -f[no]objc-exceptions and -f[no]cxx-exceptions now have an
>>>>>>>> identical relationship with -f[no]exceptions.
>>>>>>>>
>>>>>>>
>>>>>>> Did anyone from Apple review this? I thought the intention was that
>>>>>>> -fno-exceptions disables c++ exceptions but keeps objc exceptions enabled,
>>>>>>> since a) many people don't want c++ exceptions so they use -fno-exceptions
>>>>>>> but b) cocoa uses exceptions so you can't really build without objc
>>>>>>> exceptions.
>>>>>>>
>>>>>>> (I'm guessing I'm misunderstanding the patch somehow.)
>>>>>>>
>>>>>>
>>>>>> The original code was trying to mimic GCC's behavior where
>>>>>> -fobjc-exceptions _ignores_ -fno-exceptions.
>>>>>> In GCC, this means that ObjC++ code cannot _ever_ opt out of C++
>>>>>> exceptions because they don't have a -fcxx-exceptions, they just have
>>>>>> -fexceptions.  Clang has a different dichotomy of exception
>>>>>> enabling/disabling flags and it doesn't make sense to copy GCC's arbitrary
>>>>>> behavior.
>>>>>>
>>>>>> If you want Objective-C exceptions but not C++ exceptions,
>>>>>> -fobjc-exceptions -fno-cxx-exceptions should do the trick.
>>>>>>
>>>>>
>>>>> I'm somewhat sure that when these flags got added they were explicitly
>>>>> put in a state where -fno-exceptions disables c++ exceptions but not objc
>>>>> exceptions, for the reason I mentioned above. I don't remember anything
>>>>> about gcc compatibility.
>>>>>
>>>>
>>>>
>>>> http://llvm.org/klaus/clang/commit/d47ea693706f7b0ffa68e879b73a71609a337786/
>>>>
>>>> "Be compatible with GCC behavior in that -fno-exceptions *does not*
>>>> disable Obj-C exceptions."
>>>> "This is not necessarily sensible, but follows GCC."
>>>>
>>>>
>>>>>
>>>>> Most software doesn't use Objective-C, and when folks say
>>>>> -fno-exceptions they mean "no c++ exceptions".
>>>>>
>>>>
>>>> Sure, but that's not what -fno-exceptions does in GCC.
>>>>
>>>> In C, it disables -fexceptions; this will ensure that calls to
>>>> __gcc_personality_v0 will not occur.  It also changes the behavior of
>>>> __attribute__((cleanup)).
>>>> In Objective C, it does nothing.
>>>> In C++, it disables -fexceptions; this will ensure that calls to
>>>> __gxx_personality_v0 will not occur. It makes it illegal to mention 'try'
>>>> and 'catch'.
>>>> In Objective C++, it does nothing.
>>>>
>>>
>>> What gcc does for Objective-C nowadays doesn't matter much, almost
>>> everyone building Objective-C code uses clang. The gcc behavior is
>>> nonsensical, clang's previous behavior wasn't.
>>>
>>> This commit changes behavior fairly severely, without much of a
>>> motivation from what I understand.
>>>
>>> I think clang's previous behavior makes a lot of sense: You have
>>> -fno-exceptions in all your build files, and you want that to disable c++
>>> exceptions on linux. You want the same flag mean the same thing on OS X in
>>> .mm files. If you're writing regular mac apps, you can't realistically
>>> disable objc exceptions as some framework apis use them.
>>>
>>> Having said that, from what I can tell this commit doesn't help with
>>> what I think it was supposed to help with:
>>>
>>> $ ~/src/llvm-build/bin/clang -fno-exceptions -fobjc-exceptions
>>> -fno-cxx-exceptions -E -dM -x objective-c++ /dev/null | grep EXCEP
>>> #define OBJC_ZEROCOST_EXCEPTIONS 1
>>> #define __EXCEPTIONS 1
>>>
>>
>> The only thing __EXCEPTIONS really *reliably* corresponds to whether or
>> not __attribute__((cleanup)) does special stuff if an exception is thrown.
>> Why? Because __EXCEPTIONS *must* be set to 1 in 'C' mode if -fexceptions is
>> enabled.
>>
>
> Code in the wild uses is to check if it's ok to use try / catch.
>

We were able to agree that code which uses __EXCEPTIONS to determine if try
/ catch can be used is broken but the old interaction between
-fobjc-exceptions and -fexceptions should be preserved.



>
>
>> -fobjc-exceptions enables this functionality in clang and gcc, both
>> before *and* after my change.
>>
>> The best way to determine if C++ exceptions are available is
>> __has_feature(cxx_exceptions).
>>
>
>>
>>>
>>>
>>>>
>>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Added:
>>>>>>>>     cfe/trunk/test/Driver/exceptions.mm
>>>>>>>> Removed:
>>>>>>>>     cfe/trunk/test/Driver/exceptions.m
>>>>>>>> Modified:
>>>>>>>>     cfe/trunk/lib/Driver/Tools.cpp
>>>>>>>>     cfe/trunk/test/Driver/rewrite-legacy-objc.m
>>>>>>>>
>>>>>>>> Modified: cfe/trunk/lib/Driver/Tools.cpp
>>>>>>>> URL:
>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=223455&r1=223454&r2=223455&view=diff
>>>>>>>>
>>>>>>>> ==============================================================================
>>>>>>>> --- cfe/trunk/lib/Driver/Tools.cpp (original)
>>>>>>>> +++ cfe/trunk/lib/Driver/Tools.cpp Fri Dec  5 02:56:55 2014
>>>>>>>> @@ -1894,23 +1894,6 @@ static void getTargetFeatures(const Driv
>>>>>>>>    }
>>>>>>>>  }
>>>>>>>>
>>>>>>>> -static bool
>>>>>>>> -shouldUseExceptionTablesForObjCExceptions(const ObjCRuntime
>>>>>>>> &runtime,
>>>>>>>> -                                          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 (runtime.isNonFragile())
>>>>>>>> -    return true;
>>>>>>>> -
>>>>>>>> -  if (!Triple.isMacOSX())
>>>>>>>> -    return false;
>>>>>>>> -
>>>>>>>> -  return (!Triple.isMacOSXVersionLT(10,5) &&
>>>>>>>> -          (Triple.getArch() == llvm::Triple::x86_64 ||
>>>>>>>> -           Triple.getArch() == llvm::Triple::arm));
>>>>>>>> -}
>>>>>>>> -
>>>>>>>>  // exceptionSettings() exists to share the logic between -cc1 and
>>>>>>>> linker
>>>>>>>>  // invocations.
>>>>>>>>  static bool exceptionSettings(const ArgList &Args, const
>>>>>>>> llvm::Triple &Triple) {
>>>>>>>> @@ -1947,15 +1930,21 @@ static void addExceptionArgs(const ArgLi
>>>>>>>>    // Gather the exception settings from the command line arguments.
>>>>>>>>    bool EH = exceptionSettings(Args, Triple);
>>>>>>>>
>>>>>>>> -  // Obj-C exceptions are enabled by default, regardless of
>>>>>>>> -fexceptions. This
>>>>>>>> -  // is not necessarily sensible, but follows GCC.
>>>>>>>> -  if (types::isObjC(InputType) &&
>>>>>>>> -      Args.hasFlag(options::OPT_fobjc_exceptions,
>>>>>>>> -                   options::OPT_fno_objc_exceptions,
>>>>>>>> -                   true)) {
>>>>>>>> -    CmdArgs.push_back("-fobjc-exceptions");
>>>>>>>> +  if (types::isObjC(InputType)) {
>>>>>>>> +    bool ObjCExceptionsEnabled = true;
>>>>>>>> +    if (Arg *A = Args.getLastArg(options::OPT_fobjc_exceptions,
>>>>>>>> +                                 options::OPT_fno_objc_exceptions,
>>>>>>>> +                                 options::OPT_fexceptions,
>>>>>>>> +                                 options::OPT_fno_exceptions))
>>>>>>>> +      ObjCExceptionsEnabled =
>>>>>>>> +          A->getOption().matches(options::OPT_fobjc_exceptions) ||
>>>>>>>> +          A->getOption().matches(options::OPT_fexceptions);
>>>>>>>> +
>>>>>>>> +    if (ObjCExceptionsEnabled) {
>>>>>>>> +      CmdArgs.push_back("-fobjc-exceptions");
>>>>>>>>
>>>>>>>> -    EH |= shouldUseExceptionTablesForObjCExceptions(objcRuntime,
>>>>>>>> Triple);
>>>>>>>> +      EH = true;
>>>>>>>> +    }
>>>>>>>>    }
>>>>>>>>
>>>>>>>>    if (types::isCXX(InputType)) {
>>>>>>>>
>>>>>>>> Removed: cfe/trunk/test/Driver/exceptions.m
>>>>>>>> URL:
>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/exceptions.m?rev=223454&view=auto
>>>>>>>>
>>>>>>>> ==============================================================================
>>>>>>>> --- cfe/trunk/test/Driver/exceptions.m (original)
>>>>>>>> +++ cfe/trunk/test/Driver/exceptions.m (removed)
>>>>>>>> @@ -1,19 +0,0 @@
>>>>>>>> -// RUN: %clang -target x86_64-apple-darwin9 \
>>>>>>>> -// RUN:   -fsyntax-only -fno-exceptions %s
>>>>>>>> -
>>>>>>>> -void f1() {
>>>>>>>> -  @throw @"A";
>>>>>>>> -}
>>>>>>>> -
>>>>>>>> -void f0() {
>>>>>>>> -  @try {
>>>>>>>> -    f1();
>>>>>>>> -  } @catch (id x) {
>>>>>>>> -    ;
>>>>>>>> -  }
>>>>>>>> -}
>>>>>>>> -
>>>>>>>> -int main() {
>>>>>>>> -  f0();
>>>>>>>> -  return 0;
>>>>>>>> -}
>>>>>>>>
>>>>>>>> Added: cfe/trunk/test/Driver/exceptions.mm
>>>>>>>> URL:
>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/exceptions.mm?rev=223455&view=auto
>>>>>>>>
>>>>>>>> ==============================================================================
>>>>>>>> --- cfe/trunk/test/Driver/exceptions.mm (added)
>>>>>>>> +++ cfe/trunk/test/Driver/exceptions.mm Fri Dec  5 02:56:55 2014
>>>>>>>> @@ -0,0 +1,6 @@
>>>>>>>> +// RUN: %clang -target x86_64-apple-darwin11 -fno-exceptions %s -o
>>>>>>>> - -### 2>&1 | \
>>>>>>>> +// RUN:   FileCheck %s
>>>>>>>> +
>>>>>>>> +CHECK-NOT: "-fobjc-exceptions"
>>>>>>>> +CHECK-NOT: "-fcxx-exceptions"
>>>>>>>> +CHECK-NOT: "-fexceptions"
>>>>>>>>
>>>>>>>> Modified: cfe/trunk/test/Driver/rewrite-legacy-objc.m
>>>>>>>> URL:
>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/rewrite-legacy-objc.m?rev=223455&r1=223454&r2=223455&view=diff
>>>>>>>>
>>>>>>>> ==============================================================================
>>>>>>>> --- cfe/trunk/test/Driver/rewrite-legacy-objc.m (original)
>>>>>>>> +++ cfe/trunk/test/Driver/rewrite-legacy-objc.m Fri Dec  5 02:56:55
>>>>>>>> 2014
>>>>>>>> @@ -9,5 +9,5 @@
>>>>>>>>  // RUN:   FileCheck -check-prefix=TEST1 %s
>>>>>>>>  // RUN: %clang -no-canonical-prefixes -target
>>>>>>>> i386-apple-macosx10.6.0 -rewrite-legacy-objc %s -o - -### 2>&1 | \
>>>>>>>>  // RUN:   FileCheck -check-prefix=TEST2 %s
>>>>>>>> -// TEST1: "-fmessage-length" "0" "-stack-protector" "1"
>>>>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile"
>>>>>>>> "-fobjc-subscripting-legacy-runtime" "-fencode-extended-block-signature"
>>>>>>>> "-fno-objc-infer-related-result-type" "-fobjc-exceptions"
>>>>>>>> "-fmax-type-align=16" "-fdiagnostics-show-option"
>>>>>>>> -// TEST2: "-fmessage-length" "0" "-stack-protector" "1"
>>>>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile"
>>>>>>>> "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type"
>>>>>>>> "-fobjc-exceptions" "-fmax-type-align=16" "-fdiagnostics-show-option"
>>>>>>>> +// TEST1: "-fmessage-length" "0" "-stack-protector" "1"
>>>>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile"
>>>>>>>> "-fobjc-subscripting-legacy-runtime" "-fencode-extended-block-signature"
>>>>>>>> "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions"
>>>>>>>> "-fmax-type-align=16" "-fdiagnostics-show-option"
>>>>>>>> +// TEST2: "-fmessage-length" "0" "-stack-protector" "1"
>>>>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile"
>>>>>>>> "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type"
>>>>>>>> "-fobjc-exceptions" "-fexceptions" "-fmax-type-align=16"
>>>>>>>> "-fdiagnostics-show-option"
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> cfe-commits mailing list
>>>>>>>> cfe-commits at cs.uiuc.edu
>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> On Fri, Dec 5, 2014 at 11:25 AM, Nico Weber <thakis at chromium.org>
>>>>>> wrote:
>>>>>>
>>>>>>> On Fri, Dec 5, 2014 at 12:56 AM, David Majnemer <
>>>>>>> david.majnemer at gmail.com> wrote:
>>>>>>>
>>>>>>>> Author: majnemer
>>>>>>>> Date: Fri Dec  5 02:56:55 2014
>>>>>>>> New Revision: 223455
>>>>>>>>
>>>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=223455&view=rev
>>>>>>>> Log:
>>>>>>>> Driver: Objective-C should respect -fno-exceptions
>>>>>>>>
>>>>>>>> Clang attempted to replicate a GCC bug: -fobjc-exceptions forces
>>>>>>>> -fexceptions to be enabled.  However, this has unintended effects
>>>>>>>> and
>>>>>>>> other awkard side effects that Clang doesn't "correctly" ape (e.g.
>>>>>>>> it's
>>>>>>>> impossible to turn off C++ exceptions in ObjC++ mode
>>>>>>>
>>>>>>>
>>>>>>> What does "impossible to turn off exceptions" mean here?
>>>>>>>
>>>>>>> $ clang -c test.mm -fno-exceptions
>>>>>>> test.mm:2:3: error: cannot use 'try' with exceptions disabled
>>>>>>>   try {} catch (...) {}
>>>>>>>   ^
>>>>>>> 1 error generated.
>>>>>>>
>>>>>>> ).
>>>>>>>>
>>>>>>>> Instead, -f[no]objc-exceptions and -f[no]cxx-exceptions now have an
>>>>>>>> identical relationship with -f[no]exceptions.
>>>>>>>>
>>>>>>>
>>>>>>> Did anyone from Apple review this? I thought the intention was that
>>>>>>> -fno-exceptions disables c++ exceptions but keeps objc exceptions enabled,
>>>>>>> since a) many people don't want c++ exceptions so they use -fno-exceptions
>>>>>>> but b) cocoa uses exceptions so you can't really build without objc
>>>>>>> exceptions.
>>>>>>>
>>>>>>> (I'm guessing I'm misunderstanding the patch somehow.)
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Added:
>>>>>>>>     cfe/trunk/test/Driver/exceptions.mm
>>>>>>>> Removed:
>>>>>>>>     cfe/trunk/test/Driver/exceptions.m
>>>>>>>> Modified:
>>>>>>>>     cfe/trunk/lib/Driver/Tools.cpp
>>>>>>>>     cfe/trunk/test/Driver/rewrite-legacy-objc.m
>>>>>>>>
>>>>>>>> Modified: cfe/trunk/lib/Driver/Tools.cpp
>>>>>>>> URL:
>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=223455&r1=223454&r2=223455&view=diff
>>>>>>>>
>>>>>>>> ==============================================================================
>>>>>>>> --- cfe/trunk/lib/Driver/Tools.cpp (original)
>>>>>>>> +++ cfe/trunk/lib/Driver/Tools.cpp Fri Dec  5 02:56:55 2014
>>>>>>>> @@ -1894,23 +1894,6 @@ static void getTargetFeatures(const Driv
>>>>>>>>    }
>>>>>>>>  }
>>>>>>>>
>>>>>>>> -static bool
>>>>>>>> -shouldUseExceptionTablesForObjCExceptions(const ObjCRuntime
>>>>>>>> &runtime,
>>>>>>>> -                                          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 (runtime.isNonFragile())
>>>>>>>> -    return true;
>>>>>>>> -
>>>>>>>> -  if (!Triple.isMacOSX())
>>>>>>>> -    return false;
>>>>>>>> -
>>>>>>>> -  return (!Triple.isMacOSXVersionLT(10,5) &&
>>>>>>>> -          (Triple.getArch() == llvm::Triple::x86_64 ||
>>>>>>>> -           Triple.getArch() == llvm::Triple::arm));
>>>>>>>> -}
>>>>>>>> -
>>>>>>>>  // exceptionSettings() exists to share the logic between -cc1 and
>>>>>>>> linker
>>>>>>>>  // invocations.
>>>>>>>>  static bool exceptionSettings(const ArgList &Args, const
>>>>>>>> llvm::Triple &Triple) {
>>>>>>>> @@ -1947,15 +1930,21 @@ static void addExceptionArgs(const ArgLi
>>>>>>>>    // Gather the exception settings from the command line arguments.
>>>>>>>>    bool EH = exceptionSettings(Args, Triple);
>>>>>>>>
>>>>>>>> -  // Obj-C exceptions are enabled by default, regardless of
>>>>>>>> -fexceptions. This
>>>>>>>> -  // is not necessarily sensible, but follows GCC.
>>>>>>>> -  if (types::isObjC(InputType) &&
>>>>>>>> -      Args.hasFlag(options::OPT_fobjc_exceptions,
>>>>>>>> -                   options::OPT_fno_objc_exceptions,
>>>>>>>> -                   true)) {
>>>>>>>> -    CmdArgs.push_back("-fobjc-exceptions");
>>>>>>>> +  if (types::isObjC(InputType)) {
>>>>>>>> +    bool ObjCExceptionsEnabled = true;
>>>>>>>> +    if (Arg *A = Args.getLastArg(options::OPT_fobjc_exceptions,
>>>>>>>> +                                 options::OPT_fno_objc_exceptions,
>>>>>>>> +                                 options::OPT_fexceptions,
>>>>>>>> +                                 options::OPT_fno_exceptions))
>>>>>>>> +      ObjCExceptionsEnabled =
>>>>>>>> +          A->getOption().matches(options::OPT_fobjc_exceptions) ||
>>>>>>>> +          A->getOption().matches(options::OPT_fexceptions);
>>>>>>>> +
>>>>>>>> +    if (ObjCExceptionsEnabled) {
>>>>>>>> +      CmdArgs.push_back("-fobjc-exceptions");
>>>>>>>>
>>>>>>>> -    EH |= shouldUseExceptionTablesForObjCExceptions(objcRuntime,
>>>>>>>> Triple);
>>>>>>>> +      EH = true;
>>>>>>>> +    }
>>>>>>>>    }
>>>>>>>>
>>>>>>>>    if (types::isCXX(InputType)) {
>>>>>>>>
>>>>>>>> Removed: cfe/trunk/test/Driver/exceptions.m
>>>>>>>> URL:
>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/exceptions.m?rev=223454&view=auto
>>>>>>>>
>>>>>>>> ==============================================================================
>>>>>>>> --- cfe/trunk/test/Driver/exceptions.m (original)
>>>>>>>> +++ cfe/trunk/test/Driver/exceptions.m (removed)
>>>>>>>> @@ -1,19 +0,0 @@
>>>>>>>> -// RUN: %clang -target x86_64-apple-darwin9 \
>>>>>>>> -// RUN:   -fsyntax-only -fno-exceptions %s
>>>>>>>> -
>>>>>>>> -void f1() {
>>>>>>>> -  @throw @"A";
>>>>>>>> -}
>>>>>>>> -
>>>>>>>> -void f0() {
>>>>>>>> -  @try {
>>>>>>>> -    f1();
>>>>>>>> -  } @catch (id x) {
>>>>>>>> -    ;
>>>>>>>> -  }
>>>>>>>> -}
>>>>>>>> -
>>>>>>>> -int main() {
>>>>>>>> -  f0();
>>>>>>>> -  return 0;
>>>>>>>> -}
>>>>>>>>
>>>>>>>> Added: cfe/trunk/test/Driver/exceptions.mm
>>>>>>>> URL:
>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/exceptions.mm?rev=223455&view=auto
>>>>>>>>
>>>>>>>> ==============================================================================
>>>>>>>> --- cfe/trunk/test/Driver/exceptions.mm (added)
>>>>>>>> +++ cfe/trunk/test/Driver/exceptions.mm Fri Dec  5 02:56:55 2014
>>>>>>>> @@ -0,0 +1,6 @@
>>>>>>>> +// RUN: %clang -target x86_64-apple-darwin11 -fno-exceptions %s -o
>>>>>>>> - -### 2>&1 | \
>>>>>>>> +// RUN:   FileCheck %s
>>>>>>>> +
>>>>>>>> +CHECK-NOT: "-fobjc-exceptions"
>>>>>>>> +CHECK-NOT: "-fcxx-exceptions"
>>>>>>>> +CHECK-NOT: "-fexceptions"
>>>>>>>>
>>>>>>>> Modified: cfe/trunk/test/Driver/rewrite-legacy-objc.m
>>>>>>>> URL:
>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/rewrite-legacy-objc.m?rev=223455&r1=223454&r2=223455&view=diff
>>>>>>>>
>>>>>>>> ==============================================================================
>>>>>>>> --- cfe/trunk/test/Driver/rewrite-legacy-objc.m (original)
>>>>>>>> +++ cfe/trunk/test/Driver/rewrite-legacy-objc.m Fri Dec  5 02:56:55
>>>>>>>> 2014
>>>>>>>> @@ -9,5 +9,5 @@
>>>>>>>>  // RUN:   FileCheck -check-prefix=TEST1 %s
>>>>>>>>  // RUN: %clang -no-canonical-prefixes -target
>>>>>>>> i386-apple-macosx10.6.0 -rewrite-legacy-objc %s -o - -### 2>&1 | \
>>>>>>>>  // RUN:   FileCheck -check-prefix=TEST2 %s
>>>>>>>> -// TEST1: "-fmessage-length" "0" "-stack-protector" "1"
>>>>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile"
>>>>>>>> "-fobjc-subscripting-legacy-runtime" "-fencode-extended-block-signature"
>>>>>>>> "-fno-objc-infer-related-result-type" "-fobjc-exceptions"
>>>>>>>> "-fmax-type-align=16" "-fdiagnostics-show-option"
>>>>>>>> -// TEST2: "-fmessage-length" "0" "-stack-protector" "1"
>>>>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile"
>>>>>>>> "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type"
>>>>>>>> "-fobjc-exceptions" "-fmax-type-align=16" "-fdiagnostics-show-option"
>>>>>>>> +// TEST1: "-fmessage-length" "0" "-stack-protector" "1"
>>>>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile"
>>>>>>>> "-fobjc-subscripting-legacy-runtime" "-fencode-extended-block-signature"
>>>>>>>> "-fno-objc-infer-related-result-type" "-fobjc-exceptions" "-fexceptions"
>>>>>>>> "-fmax-type-align=16" "-fdiagnostics-show-option"
>>>>>>>> +// TEST2: "-fmessage-length" "0" "-stack-protector" "1"
>>>>>>>> "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-fragile"
>>>>>>>> "-fencode-extended-block-signature" "-fno-objc-infer-related-result-type"
>>>>>>>> "-fobjc-exceptions" "-fexceptions" "-fmax-type-align=16"
>>>>>>>> "-fdiagnostics-show-option"
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> cfe-commits mailing list
>>>>>>>> cfe-commits at cs.uiuc.edu
>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141208/fc7fb42d/attachment.html>


More information about the cfe-commits mailing list