SOURCES: gcc-pr19505.patch (NEW) - fix java ICE during .class -> n...

pluto pluto at pld-linux.org
Mon Oct 3 11:28:52 CEST 2005


Author: pluto                        Date: Mon Oct  3 09:28:51 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- fix java ICE during .class -> native compilation.

---- Files affected:
SOURCES:
   gcc-pr19505.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/gcc-pr19505.patch
diff -u /dev/null SOURCES/gcc-pr19505.patch:1.1
--- /dev/null	Mon Oct  3 11:28:51 2005
+++ SOURCES/gcc-pr19505.patch	Mon Oct  3 11:28:46 2005
@@ -0,0 +1,32 @@
+The problem here is that have two basic block forwarders which go to the
+same basic block but destination of two different eh regions.  We cannot
+forward both of these basic blocks to that other basic block.
+
+The way I fixed the issue is to make sure that if we removing
+a forwarder block which is coming in from a EH edge, make sure
+that the destination basic block have only one single predecessor.
+Yes this is too strong but there is no simple way to check if a basic
+block is the destination of a different eh region.
+
+--- gcc/gcc/tree-cfgcleanup.c	19 Aug 2005 18:52:55 -0000	2.7
++++ gcc/gcc/tree-cfgcleanup.c	24 Sep 2005 23:30:54 -0000
+@@ -392,7 +392,18 @@ remove_forwarder_block (basic_block bb, 
+ 	    return false;
+ 	}
+     }
+-
++  /* Check to make sure that we can remove a forwarder block for eh edges.  */
++  FOR_EACH_EDGE (e, ei, bb->preds)
++    {
++      /* This check is too strong, we should also be checking eh regions
++         but this is much harder.  */
++      if (e->flags & EDGE_EH)
++        {
++	  if (!single_pred_p (dest))
++	    return false;
++	}
++    }
++  
+   /* Redirect the edges.  */
+   for (ei = ei_start (bb->preds); (e = ei_safe_edge (ei)); )
+     {
================================================================



More information about the pld-cvs-commit mailing list