except.c (expand_eh_region_end_allowed): Call do_pending_stack_adjust as necessary.
authorMark Mitchell <mark@codesourcery.com>
Fri, 8 Jun 2001 16:19:45 +0000 (16:19 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Fri, 8 Jun 2001 16:19:45 +0000 (16:19 +0000)
* except.c (expand_eh_region_end_allowed): Call
do_pending_stack_adjust as necessary.

From-SVN: r43020

gcc/ChangeLog
gcc/except.c

index 016586bf4f73f603f0c3556f6e52e3f8d6e7980b..fc9e90242d9e7050e87171044e3984478737b953 100644 (file)
@@ -1,3 +1,8 @@
+2001-06-08  Mark Mitchell  <mark@codesourcery.com>
+
+       * except.c (expand_eh_region_end_allowed): Call
+       do_pending_stack_adjust as necessary.
+
 Fri Jun  8 14:16:33 CEST 2001  Jan Hubicka  <jh@suse.cz>
 
        * function.c (clobber_return_register): Clobber the pseudo return
index e59afc681f58147b4f680eb87c3e9a8ea4128ccd..5ad9071ec59004ecae025e4a18a8bd995b08a2a2 100644 (file)
@@ -857,11 +857,19 @@ expand_eh_region_end_allowed (allowed, failure)
      throws a different exception, that it will be processed by the
      correct region.  */
 
+  /* If there are any pending stack adjustments, we must emit them
+     before we branch -- otherwise, we won't know how much adjustment
+     is required later.  */
+  do_pending_stack_adjust ();
   around_label = gen_label_rtx ();
   emit_jump (around_label);
 
   emit_label (region->label);
   expand_expr (failure, const0_rtx, VOIDmode, EXPAND_NORMAL);
+  /* We must adjust the stack before we reach the AROUND_LABEL because
+     the call to FAILURE does not occur on all paths to the
+     AROUND_LABEL.  */
+  do_pending_stack_adjust ();
 
   emit_label (around_label);
 }