[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Bug rtl-optimization/31944] Endless loop while building a 64-bit 2.6.20 kernel

------- Comment #5 from danglin at gcc dot gnu dot org  2007-05-20 19:02 -------
In order to prevent flush_hash_table from looping forever, the call to
invalidate (p->exp, VOIDmode) has to remove the element p.  However, this
doesn't happen.  It only removes the entry if lookup_for_remove finds the

            /* Because a register can be referenced in more than one mode,
               we might have to remove more than one table entry.  */
            struct table_elt *elt;

            while ((elt = lookup_for_remove (x, hash, GET_MODE (x))))
              remove_from_table (elt, hash);

For some reason, reg:DI 66 isn't found:

(gdb) p lookup_for_remove (0x800003fffec89d00, 29, DImode)
$20 = (struct table_elt *) 0x0

I'm thinking that flush_hash_table should check p after calling invalidate
and call remove_from_table if it's nonzero.



------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

Reply to: