aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-12-16 07:25:13 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1992-12-16 07:25:13 -0500
commitdd132134f35fec8a121aa2710a57d176c2ee66ed (patch)
tree67769aed3cecc0b55a501f50ea2422afc42eef0f
parent381ee8af99ad3074e921820775208947d7d3b2a1 (diff)
downloadgcc-dd132134f35fec8a121aa2710a57d176c2ee66ed.zip
gcc-dd132134f35fec8a121aa2710a57d176c2ee66ed.tar.gz
gcc-dd132134f35fec8a121aa2710a57d176c2ee66ed.tar.bz2
(expand_goto): Set LABEL_REF_NONLOCAL_P in the LABEL_REF we make in
the non-local case. From-SVN: r2882
-rw-r--r--gcc/stmt.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 6719a5c..98c2c9e 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -625,8 +625,11 @@ expand_goto (label)
if (context != 0 && context != current_function_decl)
{
struct function *p = find_function_data (context);
+ rtx label_ref = gen_rtx (LABEL_REF, Pmode, label_rtx (label));
rtx temp;
+
p->has_nonlocal_label = 1;
+ LABEL_REF_NONLOCAL_P (label_ref) = 1;
/* Copy the rtl for the slots so that they won't be shared in
case the virtual stack vars register gets instantiated differently
@@ -637,8 +640,7 @@ expand_goto (label)
emit_insn (gen_nonlocal_goto (lookup_static_chain (label),
copy_rtx (p->nonlocal_goto_handler_slot),
copy_rtx (p->nonlocal_goto_stack_level),
- gen_rtx (LABEL_REF, Pmode,
- label_rtx (label))));
+ label_ref));
else
#endif
{
@@ -671,8 +673,7 @@ expand_goto (label)
emit_stack_restore (SAVE_NONLOCAL, addr, NULL_RTX);
/* Put in the static chain register the nonlocal label address. */
- emit_move_insn (static_chain_rtx,
- gen_rtx (LABEL_REF, Pmode, label_rtx (label)));
+ emit_move_insn (static_chain_rtx, label_ref);
/* USE of frame_pointer_rtx added for consistency; not clear if
really needed. */
emit_insn (gen_rtx (USE, VOIDmode, frame_pointer_rtx));