public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-4736] rtl-ssa: Fix bug in function_info::add_insn_after
@ 2023-10-19 10:14 Alex Coplan
  0 siblings, 0 replies; only message in thread
From: Alex Coplan @ 2023-10-19 10:14 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:c338083377021d27ce625fcd312c316e20e1792c

commit r14-4736-gc338083377021d27ce625fcd312c316e20e1792c
Author: Alex Coplan <alex.coplan@arm.com>
Date:   Fri Oct 13 17:13:16 2023 +0100

    rtl-ssa: Fix bug in function_info::add_insn_after
    
    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.
    
    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 ().

Diff:
---
 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 a0c2fec2b706..f970375d9066 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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-10-19 10:14 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-19 10:14 [gcc r14-4736] rtl-ssa: Fix bug in function_info::add_insn_after Alex Coplan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).