Alex Coplan <alex.cop...@arm.com> writes:
> In the case that !insn->is_debug_insn () && next->is_debug_insn (), this
> function was missing an update of the prev pointer on the first nondebug
> insn following the sequence of debug insns starting at next.
>
> This can lead to corruption of the insn chain, in that we end up with:
>
>   insn->next_any_insn ()->prev_any_insn () != insn
>
> in this case.  This patch fixes that.
>
> Bootstrapped/regtested as a series on aarch64-linux-gnu, OK for trunk?
>
> gcc/ChangeLog:
>
>       * rtl-ssa/insns.cc (function_info::add_insn_after): Ensure we
>       update the prev pointer on the following nondebug insn in the
>       case that !insn->is_debug_insn () && next->is_debug_insn ().

OK, thanks.

Richard

> ---
>  gcc/rtl-ssa/insns.cc | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/rtl-ssa/insns.cc b/gcc/rtl-ssa/insns.cc
> index a0c2fec2b70..f970375d906 100644
> --- a/gcc/rtl-ssa/insns.cc
> +++ b/gcc/rtl-ssa/insns.cc
> @@ -291,9 +291,17 @@ function_info::add_insn_after (insn_info *insn, 
> insn_info *after)
>         first->set_last_debug_insn (insn);
>       }
>        else // !insn->is_debug_insn () && next->is_debug_insn ()
> -     // At present we don't (need to) support inserting a nondebug
> -     // instruction between two existing debug instructions.
> -     gcc_assert (!after->is_debug_insn ());
> +     {
> +       // At present we don't (need to) support inserting a nondebug
> +       // instruction between two existing debug instructions.
> +       gcc_assert (!after->is_debug_insn ());
> +
> +       // Find the next nondebug insn and update its previous pointer
> +       // to point to INSN.
> +       auto next_nondebug = next->last_debug_insn ()->next_any_insn ();
> +       gcc_checking_assert (!next_nondebug->is_debug_insn ());
> +       next_nondebug->set_prev_sametype_insn (insn);
> +     }
>  
>        // If AFTER and NEXT are separated by at least two points, we can
>        // use a unique point number for INSN.  Otherwise INSN will have

Reply via email to