===================================================================
@@ -3822,13 +3822,16 @@
c->end_try_locus = input_location;
cur_try_context = c;
- if (flag_objc_sjlj_exceptions)
+ /* -fobjc-exceptions is required to enable Objective-C exceptions.
+ For example, on Darwin, ObjC exceptions require a sufficiently
+ recent version of the runtime, so the user must ask for them
+ explicitly. On other platforms, at the moment -fobjc-exceptions
+ triggers -fexceptions which again is required for exceptions to
+ work.
+ */
+ if (!flag_objc_exceptions)
{
- /* On Darwin, ObjC exceptions require a sufficiently recent
- version of the runtime, so the user must ask for them explicitly. */
- if (!flag_objc_exceptions)
- warning (0, "use %<-fobjc-exceptions%> to enable Objective-C "
- "exception syntax");
+ error_at (try_locus, "%<-fobjc-exceptions%> is required to enable Objective-C exception syntax");
}
if (flag_objc_sjlj_exceptions)
@@ -3979,13 +3982,9 @@
{
tree args;
- if (flag_objc_sjlj_exceptions)
+ if (!flag_objc_exceptions)
{
- /* On Darwin, ObjC exceptions require a sufficiently recent
- version of the runtime, so the user must ask for them explicitly. */
- if (!flag_objc_exceptions)
- warning (0, "use %<-fobjc-exceptions%> to enable Objective-C "
- "exception syntax");
+ error_at (loc, "%<-fobjc-exceptions%> is required to enable Objective-C exception syntax");
}
if (throw_expr == NULL)
===================================================================
@@ -0,0 +1,28 @@
+/* Test that Objective-C exceptions cause an error with -fobjc-exceptions. */
+/* { dg-do compile } */
+
+@class Object;
+
+int dummy (int number, Object *o)
+{
+ @try { /* { dg-error "fobjc-exceptions" "is required to enable Objective-C exception syntax" } */
+ number++;
+ @throw o; /* { dg-error "fobjc-exceptions" "is required to enable Objective-C exception syntax" } */
+ }
+ @catch (id object)
+ {
+ number++;
+ @throw; /* { dg-error "fobjc-exceptions" "is required to enable Objective-C exception syntax" } */
+ }
+ @finally
+ {
+ number++;
+ }
+
+ @synchronized (o) /* { dg-error "fobjc-exceptions" "is required to enable Objective-C exception syntax" } */
+ {
+ number++;
+ }
+
+ return number;
+}