OSDN Git Service

(expand_end_bindings): Use emit_move_insn instead of
authorrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Nov 1993 01:40:04 +0000 (01:40 +0000)
committerrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Nov 1993 01:40:04 +0000 (01:40 +0000)
gen_move_insn in case nonlocal_goto_handler_slot is not a valid memref.

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

gcc/stmt.c

index e6caa9f..928e6cb 100644 (file)
@@ -3108,6 +3108,7 @@ expand_end_bindings (vars, mark_ends, dont_jump_in)
       rtx afterward = gen_label_rtx ();
       rtx handler_label = gen_label_rtx ();
       rtx save_receiver = gen_reg_rtx (Pmode);
+      rtx insns;
 
       /* Don't let jump_optimize delete the handler.  */
       LABEL_PRESERVE_P (handler_label) = 1;
@@ -3117,14 +3118,20 @@ expand_end_bindings (vars, mark_ends, dont_jump_in)
       if (thisblock->next != 0)
        {
          emit_move_insn (nonlocal_goto_handler_slot, save_receiver);
-         emit_insn_before (gen_move_insn (save_receiver,
-                                          nonlocal_goto_handler_slot),
-                           thisblock->data.block.first_insn);
+
+         start_sequence ();
+         emit_move_insn (save_receiver, nonlocal_goto_handler_slot);
+         insns = get_insns ();
+         end_sequence ();
+         emit_insns_before (insns, thisblock->data.block.first_insn);
        }
-      emit_insn_before (gen_move_insn (nonlocal_goto_handler_slot,
-                                      gen_rtx (LABEL_REF, Pmode,
-                                               handler_label)),
-                       thisblock->data.block.first_insn);
+
+      start_sequence ();
+      emit_move_insn (nonlocal_goto_handler_slot,
+                     gen_rtx (LABEL_REF, Pmode, handler_label));
+      insns = get_insns ();
+      end_sequence ();
+      emit_insns_before (insns, thisblock->data.block.first_insn);
 
       /* Jump around the handler; it runs only when specially invoked.  */
       emit_jump (afterward);