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



Jakub Jelinek <jakub at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Status|NEW                         |ASSIGNED

         AssignedTo|unassigned at gcc dot       |jakub at gcc dot gnu.org

                   |gnu.org                     |



--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-11-15 
16:31:10 UTC ---

Created attachment 28701

  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28701

gcc48-pr55329.patch



Untested fix.  The problem is that clearing bits in a bitmap while it is being

iterated using EXECUTE_IF_SET_IN_BITMAP is dangerous and can't work reliably,

in this case the bitmap contained just a single bit, that got cleared and

replaced by a smaller bit (the clearing removed the only bitmap_element,

setting reused it with different index (smaller) with higher bits set in it).

In gimple_purge_all_dead_eh_edges it is just a few extra instructions to

process

the forwarder blocks (it quickly finds out that they don't have any EDGE_EH

edges and does nothing for them), so IMHO it doesn't matter much if we don't

clear those bits.  On the other side, if there could be multiple forwarder

blocks, we might risk we don't handle them correctly, as they could have bb's

with lower indexes as successors.

Reply via email to