On Wed, Apr 20, 2016 at 02:22:19AM -0400, [email protected] wrote:
> --- a/gcc/cfgrtl.c
> +++ b/gcc/cfgrtl.c
> @@ -157,7 +157,14 @@ delete_insn (rtx uncast_insn)
> }
> }
>
> - remove_node_from_insn_list (insn, &nonlocal_goto_handler_labels);
> +
> + unsigned int len = vec_safe_length (nonlocal_goto_handler_labels);
> + for (unsigned int i = 0; i < len; i++)
> + if ((*nonlocal_goto_handler_labels)[i] == insn)
> + {
> + nonlocal_goto_handler_labels->ordered_remove (i);
> + break;
> + }
> }
Maybe you want a new helper function for this?
> @@ -4255,11 +4259,10 @@ cfg_layout_initialize (unsigned int flags)
> record_effective_endpoints ();
>
> /* Make sure that the targets of non local gotos are marked. */
> - for (x = nonlocal_goto_handler_labels; x; x = x->next ())
> - {
> - bb = BLOCK_FOR_INSN (x->insn ());
> - bb->flags |= BB_NON_LOCAL_GOTO_TARGET;
> - }
> + rtx_insn *temp;
> + unsigned int i;
> + FOR_EACH_VEC_SAFE_ELT_REVERSE (nonlocal_goto_handler_labels, i, temp)
> + BLOCK_FOR_INSN (temp)->flags |= BB_NON_LOCAL_GOTO_TARGET;
Bad indent.
> @@ -3877,9 +3877,10 @@ set_initial_label_offsets (void)
> if (x->insn ())
> set_label_offsets (x->insn (), NULL, 1);
>
> - for (rtx_insn_list *x = nonlocal_goto_handler_labels; x; x = x->next ())
> - if (x->insn ())
> - set_label_offsets (x->insn (), NULL, 1);
> + rtx_insn *insn;
> + unsigned int i;
> + FOR_EACH_VEC_SAFE_ELT_REVERSE (nonlocal_goto_handler_labels, i, insn)
> + set_label_offsets (insn, NULL, 1);
Bad indent.
Segher