This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/32355] [4.3 Regression] ICE in df_lr_verify_transfer_functions, at df-problems.c:1924
- From: "zadeck at naturalbridge dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 17 Jun 2007 20:13:32 -0000
- Subject: [Bug rtl-optimization/32355] [4.3 Regression] ICE in df_lr_verify_transfer_functions, at df-problems.c:1924
- References: <bug-32355-12387@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #1 from zadeck at naturalbridge dot com 2007-06-17 20:13 -------
Subject: Re: [4.3 Regression] ICE in df_lr_verify_transfer_functions,
at df-problems.c:1924
There are possibly two problems here. Fixing the first one fixes this ice.
The first problem is that after a call to cse_main, a call to
df_finish_pass is needed to get out of deferred rescanning mode and get
everything up to date.
The possible second problem is that something in one of
delete_trivially_dead_insns
rebuild_jump_labels
cleanup_cfg
may not work in deferred rescanning mode. This will wait for another
bug report.
It is too hard to debug this without first cleaning up what cse_main did
and that makes the bug go away.
ok to commit?
Kenny
2007-06-17 Kenneth Zadeck <zadeck@naturalbridge.com>
PR middle-end/32355
* gcse (rest_of_handle_gcse): Add call to df_finish_pass after
cse_main.
* df-problems.c (df_note_bb_compute): Fix dumping info.
2007-06-17 Kenneth Zadeck <zadeck@naturalbridge.com>
* gcc.c-torture/compile/pr32355.c: New testcase.
Index: testsuite/gcc.c-torture/compile/pr32355.c
===================================================================
--- testsuite/gcc.c-torture/compile/pr32355.c (revision 0)
+++ testsuite/gcc.c-torture/compile/pr32355.c (revision 0)
@@ -0,0 +1,33 @@
+/* { dg-options "-O3" } */
+
+typedef struct
+{
+}
+__sigset_t;
+typedef struct
+{
+ char coredump;
+}
+EMode;
+extern EMode Mode;
+struct sigaction
+{
+ __sigset_t sa_mask;
+ int sa_flags;
+};
+doSignalsSetup (void)
+{
+ static const int signals[] = {
+ 1, 2 , 3, 4, 6, 8, 11, 13, 14, 15, 10, 12, 17, 7
+ };
+ unsigned int i, sig;
+ struct sigaction sa;
+ for (i = 0; i < sizeof (signals) / sizeof (int); i++)
+ {
+ sig = signals[i];
+ if (Mode.coredump && (sig == 4 || sig == 8))
+ continue;
+ sa.sa_flags = (sig == 17);
+ sigemptyset (&sa.sa_mask);
+ }
+}
Index: gcse.c
===================================================================
--- gcse.c (revision 125777)
+++ gcse.c (working copy)
@@ -6704,6 +6704,7 @@ rest_of_handle_gcse (void)
{
timevar_push (TV_CSE);
tem2 = cse_main (get_insns (), max_reg_num ());
+ df_finish_pass ();
purge_all_dead_edges ();
delete_trivially_dead_insns (get_insns (), max_reg_num ());
timevar_pop (TV_CSE);
Index: df-problems.c
===================================================================
--- df-problems.c (revision 125777)
+++ df-problems.c (working copy)
@@ -3867,8 +3867,10 @@ df_note_bb_compute (unsigned int bb_inde
for (def_rec = df_get_artificial_defs (bb_index); *def_rec; def_rec++)
{
struct df_ref *def = *def_rec;
+#ifdef REG_DEAD_DEBUGGING
if (dump_file)
fprintf (dump_file, "artificial def %d\n", DF_REF_REGNO (def));
+#endif
if ((DF_REF_FLAGS (def) & DF_REF_AT_TOP) == 0)
bitmap_clear_bit (live, DF_REF_REGNO (def));
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32355