mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-04 01:04:26 +08:00
objc-act.c (objc_eh_personality): Select personality name on runtime.
gcc/objc: * objc/objc-act.c (objc_eh_personality): Select personality name on runtime. (objc_init_exceptions): New. (objc_begin_try_stmt): Use objc_init_exceptions. (objc_build_throw_stmt): Likewise. gcc/testsuite: * fobjc-exceptions.m: Update dg-error syntax. From-SVN: r168020
This commit is contained in:
parent
628c4eee53
commit
5287cfd594
@ -1,3 +1,11 @@
|
||||
2010-12-18 Iain Sandoe <iains@gcc.gnu.org>
|
||||
|
||||
* objc/objc-act.c (objc_eh_personality): Select personality name on
|
||||
runtime.
|
||||
(objc_init_exceptions): New.
|
||||
(objc_begin_try_stmt): Use objc_init_exceptions.
|
||||
(objc_build_throw_stmt): Likewise.
|
||||
|
||||
2010-12-10 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
||||
* objc-act.c (objc_in_class_extension): New.
|
||||
|
@ -5028,11 +5028,42 @@ tree
|
||||
objc_eh_personality (void)
|
||||
{
|
||||
if (!flag_objc_sjlj_exceptions && !objc_eh_personality_decl)
|
||||
objc_eh_personality_decl = build_personality_function ("gnu_objc");
|
||||
objc_eh_personality_decl = build_personality_function
|
||||
(flag_next_runtime
|
||||
? "objc"
|
||||
: "gnu_objc");
|
||||
return objc_eh_personality_decl;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
objc_init_exceptions (location_t loc)
|
||||
{
|
||||
static bool done = false;
|
||||
|
||||
/* -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.
|
||||
*/
|
||||
/* TODO: we only really need one error message when the flag is missing. */
|
||||
if (!flag_objc_exceptions)
|
||||
{
|
||||
error_at (loc, "%<-fobjc-exceptions%> is required to enable Objective-C exception syntax");
|
||||
}
|
||||
|
||||
if (done)
|
||||
return;
|
||||
done = true;
|
||||
|
||||
#ifndef OBJCPLUS
|
||||
if (!flag_objc_sjlj_exceptions)
|
||||
using_eh_for_cleanups ();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Build __builtin_eh_pointer, or the moral equivalent. In the case
|
||||
of Darwin, we'll arrange for it to be initialized (and associated
|
||||
with a binding) later. */
|
||||
@ -5334,17 +5365,7 @@ objc_begin_try_stmt (location_t try_locus, tree body)
|
||||
c->end_try_locus = input_location;
|
||||
cur_try_context = c;
|
||||
|
||||
/* -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)
|
||||
{
|
||||
error_at (try_locus, "%<-fobjc-exceptions%> is required to enable Objective-C exception syntax");
|
||||
}
|
||||
objc_init_exceptions (try_locus);
|
||||
|
||||
/* Collect the list of local variables. We'll mark them as volatile
|
||||
at the end of compilation of this function to prevent them being
|
||||
@ -5552,10 +5573,7 @@ objc_build_throw_stmt (location_t loc, tree throw_expr)
|
||||
{
|
||||
tree args;
|
||||
|
||||
if (!flag_objc_exceptions)
|
||||
{
|
||||
error_at (loc, "%<-fobjc-exceptions%> is required to enable Objective-C exception syntax");
|
||||
}
|
||||
objc_init_exceptions (loc);
|
||||
|
||||
if (throw_expr == NULL)
|
||||
{
|
||||
|
@ -1,3 +1,7 @@
|
||||
2010-12-18 Iain Sandoe <iains@gcc.gnu.org>
|
||||
|
||||
* fobjc-exceptions.m: Update dg-error syntax.
|
||||
|
||||
2010-12-18 Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
PR target/36834
|
||||
|
@ -5,25 +5,24 @@
|
||||
|
||||
int dummy (int number, Object *o)
|
||||
{
|
||||
@try { /* { dg-error "fobjc-exceptions" "is required to enable Objective-C exception syntax" } */
|
||||
@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" } */
|
||||
@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" } */
|
||||
@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" } */
|
||||
@synchronized (o) /* { dg-error ".-fobjc-exceptions. is required to enable Objective-C exception syntax" } */
|
||||
{
|
||||
number++;
|
||||
}
|
||||
|
||||
return number;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user