summaryrefslogtreecommitdiff
path: root/gcc/except.c
diff options
context:
space:
mode:
authoramacleod <amacleod@138bc75d-0d04-0410-961f-82ee72b054a4>1998-06-23 07:10:29 +0000
committeramacleod <amacleod@138bc75d-0d04-0410-961f-82ee72b054a4>1998-06-23 07:10:29 +0000
commit64db8f624ff2b849560547ef967fd10e942aebfe (patch)
treecaff48e4d357cdb27c61741d2e59101bb1bba09b /gcc/except.c
parent664bdb1387d528628b2d3e27f6afcb62784ffb60 (diff)
downloadgcc-64db8f624ff2b849560547ef967fd10e942aebfe.tar.gz
Have -fnew-exceptions actually use the runtime field, and not generate
runtime checking code inside each handler. THis works at low opt, but not with optimization at the moment. Tue Jun 23 10:06:07 EDT 1998 Andrew MacLeod (amacleod@cygnus.com) * eh-common.h (struct __eh_info): Remove coerced value field. * libgcc2.c (find_exception_handler): Don't set coerced_value field. * except.c (get_dynamic_handler_chain, get_dynamic_cleanup_chain): Use POINTER_SIZE instead of Pmode. (expand_start_all_catch): Call start_catch_handler() if we are not using new style exceptions. 1998-06-22 Andrew MacLeod (amacleod@cygnus.com) * parse.y (function_try_block): Don't call start_catch_handler. * except.c (call_eh_info): Remove coerced field from declaration. (build_eh_type_type_ref): New function to create an address of a rtti function for the new style exception tables. (expand_start_catch_block): Split function, this contains the common part. (process_start_catch_block_old): New function to perform the rest of expand_start_catch_block under old style exceptions. (process_start_catch_block_old): New function to perform the rest of expand_start_catch_block under new style exceptions. (expand_end_catch_block): Only pop the false label off the stack under the old style of exceptions. * semantics.c (finish_try_block): Don't call start_catch_handler. * exception.cc (struct cp_eh_info): Add original_value field. (__cplus_type_matcher): Perform type matching on the original exception value, and if we have a match, set the current value. (__cp_push_exception): Set the original expcetion value. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@20671 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/except.c')
-rw-r--r--gcc/except.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/except.c b/gcc/except.c
index 63d6c82fc47..6ffa9203867 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -1025,7 +1025,7 @@ get_dynamic_handler_chain ()
/* This is the offset of dynamic_handler_chain in the eh_context struct
declared in eh-common.h. If its location is change, change this offset */
- dhc = plus_constant (ehc, GET_MODE_SIZE (Pmode));
+ dhc = plus_constant (ehc, POINTER_SIZE / BITS_PER_UNIT);
result = copy_to_reg (dhc);
@@ -1045,7 +1045,7 @@ get_dynamic_cleanup_chain ()
rtx dhc, dcc, result;
dhc = get_dynamic_handler_chain ();
- dcc = plus_constant (dhc, GET_MODE_SIZE (Pmode));
+ dcc = plus_constant (dhc, POINTER_SIZE / BITS_PER_UNIT);
result = copy_to_reg (dcc);
@@ -1618,6 +1618,10 @@ expand_start_all_catch ()
expand_eh_region_start ();
ehstack.top->entry->outer_context = outer_context;
}
+
+ /* We also have to start the handler if we aren't using the new model. */
+ if (! flag_new_exceptions)
+ start_catch_handler (NULL);
}
/* Finish up the catch block. At this point all the insns for the