re PR objc/31281 (ICE on ObjC try-catch blocks with next runtime)

PR 31281
	* objc/objc-act.c (next_sjlj_build_catch_list): Delete volatile from rethrow decl.
	* testsuite/objc/execute/exceptions/pr31281.m: New.

From-SVN: r123501
This commit is contained in:
Stuart Hastings 2007-04-04 18:37:14 +00:00 committed by Stuart Hastings
parent 59af43910d
commit dd1af55f6a
4 changed files with 38 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2007-04-04 Stuart Hastings <stuart@apple.com>
PR 31281
* objc/objc-act.c (next_sjlj_build_catch_list): Delete volatile from rethrow decl.
2007-03-01 Brooks Moses <brooks.moses@codesourcery.com> 2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
* Make-lang.in: Add dummy lang.install-pdf target. * Make-lang.in: Add dummy lang.install-pdf target.

View File

@ -3642,7 +3642,7 @@ next_sjlj_build_catch_list (void)
{ {
struct _objc_exception_data _stack; struct _objc_exception_data _stack;
id volatile _rethrow = 0; id _rethrow = 0;
try try
{ {
objc_exception_try_enter (&_stack); objc_exception_try_enter (&_stack);
@ -3686,7 +3686,6 @@ next_sjlj_build_try_catch_finally (void)
rethrow_decl = objc_create_temporary_var (objc_object_type); rethrow_decl = objc_create_temporary_var (objc_object_type);
cur_try_context->rethrow_decl = rethrow_decl; cur_try_context->rethrow_decl = rethrow_decl;
TREE_THIS_VOLATILE (rethrow_decl) = 1;
TREE_CHAIN (rethrow_decl) = stack_decl; TREE_CHAIN (rethrow_decl) = stack_decl;
/* Build the outermost variable binding level. */ /* Build the outermost variable binding level. */

View File

@ -1,3 +1,8 @@
2007-04-04 Stuart Hastings <stuart@apple.com>
PR 31281
* testsuite/objc/execute/exceptions/pr31281.m: New.
2007-04-04 Danny Smith <dannysmith.users.sourceforge.net> 2007-04-04 Danny Smith <dannysmith.users.sourceforge.net>
* g++.dg/ext/dllimport12.C: Update comments. * g++.dg/ext/dllimport12.C: Update comments.

View File

@ -0,0 +1,27 @@
/* From PR31281. */
extern void abort (void);
int __attribute__((noinline))
f(unsigned int i)
{
int j, k;
@try { } @catch(id) { return 13; }
for (j=0; j<i; j++)
for (k=0; k<i; k++)
{
@try {
if (i)
break;
} @catch(id) { }
return 9;
}
return 0;
}
int
main()
{
if (f(1))
abort ();
return 0 ;
}