OSDN Git Service

* stmt.c (expand_start_bindings): Don't allow cleanup isntructions
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 24 Sep 1999 01:14:54 +0000 (01:14 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 24 Sep 1999 01:14:54 +0000 (01:14 +0000)
to disappear.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@29644 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/stmt.c

index f2002c1..c10d22a 100644 (file)
@@ -1,3 +1,8 @@
+Thu Sep 23 18:18:55 1999  Mark Mitchell  <mark@codesourcery.com>
+
+       * stmt.c (expand_start_bindings): Don't allow cleanup isntructions
+       to disappear.
+
 Thu Sep 23 18:07:01 1999  Mark Mitchell  <mark@codesourcery.com>
 
        * optabs.c (init_traps): Register trap_rtx as a GC root.
index f2180bf..265f365 100644 (file)
@@ -3230,6 +3230,13 @@ expand_start_bindings (flags)
 
   thisblock->data.block.conditional_code = 0;
   thisblock->data.block.last_unconditional_cleanup = note;
+  /* When we insert instructions after the last unconditional cleanup,
+     we don't adjust last_insn.  That means that a later add_insn will
+     clobber the instructions we've just added.  The easiest way to
+     fix this is to just insert another instruction here, so that the
+     instructions inserted after the last unconditional cleanup are
+     never the last instruction.  */
+  emit_note (NULL_PTR, NOTE_INSN_DELETED);
   thisblock->data.block.cleanup_ptr = &thisblock->data.block.cleanups;
 
   if (block_stack