aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Stump <mrs@cygnus.com>1997-05-29 20:29:01 +0000
committerMike Stump <mrs@gcc.gnu.org>1997-05-29 20:29:01 +0000
commite00737d221dbedf7f176a5c1d09ec3e4d855fc72 (patch)
treee52dca0e05223da8463c0c2251032dcb0549e961
parentf3e10ef29e6b2b6e6d1918ce10426dcf73285825 (diff)
downloadgcc-e00737d221dbedf7f176a5c1d09ec3e4d855fc72.zip
gcc-e00737d221dbedf7f176a5c1d09ec3e4d855fc72.tar.gz
gcc-e00737d221dbedf7f176a5c1d09ec3e4d855fc72.tar.bz2
91th Cygnus<->FSF quick merge
From-SVN: r14139
-rw-r--r--gcc/cp/ChangeLog11
-rw-r--r--gcc/cp/except.c49
2 files changed, 24 insertions, 36 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a61f4ee..ccf8c1c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,14 @@
+Thu May 29 13:02:06 1997 Mike Stump <mrs@cygnus.com>
+
+ * except.c (expand_exception_blocks): Simplify and fix and make
+ sure we don't end a region in a sequence, as expand_end_bindings
+ doesn't like it.
+
+Wed May 28 17:08:03 1997 Mike Stump <mrs@cygnus.com>
+
+ * except.c (init_exception_processing): Mark terminate as not
+ returning so that the optimizer can optimize better.
+
Tue May 27 19:49:19 1997 Mike Stump <mrs@cygnus.com>
* cvt.c (convert): Don't do any extra work, if we can avoid it
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index 83363db..eb2a255 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -262,6 +262,7 @@ init_exception_processing ()
vtype, NOT_BUILT_IN);
terminate_fndecl = auto_function (get_identifier ("terminate"),
vtype, NOT_BUILT_IN);
+ TREE_THIS_VOLATILE (terminate_fndecl) = 1;
push_lang_context (lang_name_c);
@@ -916,25 +917,11 @@ expand_end_eh_spec (raises)
void
expand_exception_blocks ()
{
- rtx funcend;
- rtx insns;
-
- start_sequence ();
-
- funcend = gen_label_rtx ();
-
- start_sequence ();
-
- /* Add all the catch clauses here. */
- emit_insns (catch_clauses);
- catch_clauses = NULL_RTX;
-
+ push_to_sequence (catch_clauses);
expand_leftover_cleanups ();
-
- insns = get_insns ();
+ catch_clauses = get_insns ();
end_sequence ();
-#if 1
/* Do this after we expand leftover cleanups, so that the
expand_eh_region_end that expand_end_eh_spec does will match the
right expand_eh_region_start, and make sure it comes out before
@@ -942,20 +929,17 @@ expand_exception_blocks ()
if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
{
expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)));
- push_to_sequence (insns);
-
- /* Now expand any new ones. */
+ push_to_sequence (catch_clauses);
expand_leftover_cleanups ();
-
- insns = get_insns ();
+ catch_clauses = get_insns ();
end_sequence ();
}
-#endif
-
- emit_jump (funcend);
- if (insns)
+ if (catch_clauses)
{
+ rtx funcend = gen_label_rtx ();
+ emit_jump (funcend);
+
/* We cannot protect n regions this way if we must flow into the
EH region through the top of the region, as we have to with
the setjmp/longjmp approach. */
@@ -967,23 +951,16 @@ expand_exception_blocks ()
expand_eh_region_start ();
}
- emit_insns (insns);
+ emit_insns (catch_clauses);
+ catch_clauses = NULL_RTX;
if (exceptions_via_longjmp == 0)
expand_eh_region_end (TerminateFunctionCall);
expand_leftover_cleanups ();
- }
- emit_label (funcend);
-
- /* Only if we had previous insns do we want to emit the jump around
- them. If there weren't any, then insns will remain NULL_RTX. */
- if (insns)
- insns = get_insns ();
- end_sequence ();
-
- emit_insns (insns);
+ emit_label (funcend);
+ }
}
tree