This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/34171] [4.3 Regression] Segfault in df_chain_remove_problem with -O3 on alpha



------- Comment #13 from spark at gcc dot gnu dot org  2007-11-21 22:08 -------
The following patch seems to fix the problem:

diff -r fad6feb87420 gcc/cfgrtl.c
--- a/gcc/cfgrtl.c      Wed Nov 21 00:17:50 2007 +0000
+++ b/gcc/cfgrtl.c      Wed Nov 21 14:07:15 2007 -0800
@@ -2629,6 +2629,7 @@ cfg_layout_merge_blocks (basic_block a,
   /* In the case basic blocks are not adjacent, move them around.  */
   if (NEXT_INSN (BB_END (a)) != BB_HEAD (b))
     {
+      rtx insn;
       rtx first = unlink_insn_chain (BB_HEAD (b), BB_END (b));

       emit_insn_after_noloc (first, BB_END (a), a);
@@ -2637,7 +2638,15 @@ cfg_layout_merge_blocks (basic_block a,
        first = NEXT_INSN (first);
       gcc_assert (NOTE_INSN_BASIC_BLOCK_P (first));
       BB_HEAD (b) = NULL;
+      insn = NEXT_INSN (first);
       delete_insn (first);
+
+      for (; insn != NEXT_INSN (BB_END (b));
+          insn = NEXT_INSN (insn))
+       {
+         set_block_for_insn (insn, a);
+         df_insn_change_bb (insn);
+       }
     }
   /* Otherwise just re-associate the instructions.  */
   else


I'm going to stare at the surrounding code a bit more 
to convince myself, and will do some testing.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34171


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]