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:
Iain Sandoe 2010-12-18 11:28:46 +00:00
parent 628c4eee53
commit 5287cfd594
4 changed files with 50 additions and 21 deletions

View File

@ -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.

View File

@ -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)
{

View File

@ -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

View File

@ -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;
}