From 093c7153029151d28e4f60d9204d0edc31e7e3a2 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 17 Jun 2004 18:20:53 -0700 Subject: c-common.c (flag_objc_sjlj_exceptions): New. * c-common.c (flag_objc_sjlj_exceptions): New. * c-common.h (flag_objc_sjlj_exceptions): Declare. * c-opts.c (c_common_handle_option): Set it. (c_common_post_options): Handle interation of different objective-c exception and runtime switches. * c-decl.c (c_eh_initialized_p): New. (finish_decl): Use it instead of local eh_initialized_p. * c-parse.in (nested_function, notype_nested_function): Record the result of compstmt. (compstmt_or_error): Likewise. (compstmt): Don't add_stmt the result. (stmt): Don't return anything. Rewrite objc try and sync rules. (objc_try_stmt, objc_catch_list): Remove. (objc_catch_block, objc_finally_block): Remove. (objc_catch_prefix, objc_catch_clause, objc_opt_catch_list): New. (objc_try_catch_clause, objc_finally_clause): New. (objc_try_catch_stmt): Rewrite. * c-tree.h (c_eh_initialized_p): Declare. * c-opt (fobjc-sjlj-exceptions): New. * except.c (output_function_exception_table): Don't call cgraph on non-decls. * objc/objc-act.c (UTAG_EXCDATA_VAR, UTAG_CAUGHTEXC_VAR, UTAG_RETHROWEXC_VAR, UTAG_EVALONCE_VAR, struct val_stack, catch_count_stack, exc_binding_stack, if_nesting_count, blk_nesting_count, objc_enter_block, objc_exit_block, objc_declare_variable, val_stack_push, val_stack_pop, objc_build_try_enter_fragment, objc_build_extract_expr, objc_build_try_exit_fragment, objc_build_extract_fragment, objc_build_try_prologue, objc_build_try_epilogue, objc_build_catch_stmt, objc_build_catch_epilogue, objc_build_finally_prologue, objc_build_finally_epilogue, objc_build_try_catch_finally_stmt, objc_build_synchronized_prologue, objc_build_synchronized_epilogue): Remove. (objc_create_temporary_var, struct objc_try_context, cur_try_context, objc_eh_runtime_type, objc_init_exceptions, objc_build_exc_ptr, next_sjlj_build_try_exit, next_sjlj_build_enter_and_setjmp, next_sjlj_build_exc_extract, next_sjlj_build_catch_list, next_sjlj_build_try_catch_finally, objc_begin_try_stmt, objc_begin_catch_clause, objc_finish_catch_clause, objc_build_finally_clause, objc_finish_try_stmt, objc_build_synchronized): New. (objc_is_object_id, objc_is_class_id): New. (objc_comptypes): Use them. (build_next_objc_exception_stuff): Break NeXT sjlj out from build_objc_exception_stuff. (synth_module_prologue): Update to match. (objc_build_throw_stmt): Use cur_try_context to decide if we're in a @catch. * objc/objc-act.h: Update prototypes. (OCTI_EXCEPTION_BLK_STACK, objc_exception_block_stack): Remove. testsuite/ * objc.dg/sync-1.m: New. * objc.dg/try-catch-1.m: Don't force next runtime. * objc.dg/try-catch-3.m, objc.dg/try-catch-4.m: Likewise. * objc.dg/try-catch-2.m: Likewise. Enable everywhere. Remove shadowed catch clause. * objc.dg/try-catch-5.m: New. From-SVN: r83332 --- gcc/objc/objc-act.h | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'gcc/objc/objc-act.h') diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h index 5738bc9..8794aa4 100644 --- a/gcc/objc/objc-act.h +++ b/gcc/objc/objc-act.h @@ -39,16 +39,13 @@ void finish_method_def (void); tree start_protocol (enum tree_code, tree, tree); void finish_protocol (tree); -tree objc_build_throw_stmt (tree); -tree objc_build_try_catch_finally_stmt (int, int); -void objc_build_synchronized_prologue (tree); -tree objc_build_synchronized_epilogue (void); -tree objc_build_try_prologue (void); -void objc_build_try_epilogue (int); -void objc_build_catch_stmt (tree); -void objc_build_catch_epilogue (void); -tree objc_build_finally_prologue (void); -tree objc_build_finally_epilogue (void); +void objc_build_throw_stmt (tree); +void objc_begin_try_stmt (location_t, tree); +void objc_begin_catch_clause (tree); +void objc_finish_catch_clause (void); +void objc_build_finally_clause (location_t, tree); +void objc_finish_try_stmt (void); +void objc_build_synchronized (location_t, tree, tree); tree is_ivar (tree, tree); int is_private (tree); @@ -282,7 +279,6 @@ enum objc_tree_index OCTI_LOCAL_EXCEPTION_DECL, OCTI_RETHROW_EXCEPTION_DECL, OCTI_EVAL_ONCE_DECL, - OCTI_EXCEPTION_BLK_STACK, OCTI_CATCH_TYPE, OCTI_MAX @@ -402,8 +398,6 @@ extern GTY(()) tree objc_global_trees[OCTI_MAX]; #define objc_caught_exception objc_global_trees[OCTI_LOCAL_EXCEPTION_DECL] #define objc_rethrow_exception objc_global_trees[OCTI_RETHROW_EXCEPTION_DECL] #define objc_eval_once objc_global_trees[OCTI_EVAL_ONCE_DECL] -#define objc_exception_block_stack \ - objc_global_trees[OCTI_EXCEPTION_BLK_STACK] #define objc_catch_type objc_global_trees[OCTI_CATCH_TYPE] #define objc_method_template objc_global_trees[OCTI_METH_TEMPL] -- cgit v1.1