This is the mail archive of the gcc-patches@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]

Re: Patch PING: PR middle-end/21362: ICE in make_edges, at cfgbuild.c:327


Richard Henderson writes:
 > On Tue, May 17, 2005 at 10:13:20AM +0100, Andrew Haley wrote:
 > > Sure it is.  The instruction in the PR is
 > > 
 > > $ gcj -findirect-dispatch -shared bork.jar # works
 > 
 > Ah, I missed the -findirect-dispatch.  Omit that and you get
 > 
 > org/apache/catalina/session/FileStore.java:0: error: cannot find file \
 >   for class org.apache.catalina.session.StoreBase
 > org/apache/catalina/session/FileStore.java:0: error: cannot find file \
 >   for class org.apache.catalina.Store
 > org/apache/catalina/session/FileStore.java:0: error: cannot find file \
 >   for class org.apache.catalina.session.StoreBase
 > 
 > which is why I assumed the test case was incomplete.
 > 
 > Yes, I can reproduce the problem now.
 > 
 > I think I prefer to do this in the cfg routines, for the sole reason
 > that I'm sure we've checked the CFG and we're really sure that there
 > are no more incoming edges.  Putting this in delete_insn might make
 > some old ugly non-cfg aware code silently "work" but in the process
 > break program semantics.
 > 
 > The following works for this test case.  I'll run it through a full
 > test cycle here in moment.

What happend to this fix?  AFAICS the bug is still there.

Now both of us have written patches, but neither have been committed ...

Andrew.

 > 
 > 
 > r~
 > 
 > 
 > 
 > Index: cfgrtl.c
 > ===================================================================
 > RCS file: /cvs/gcc/gcc/gcc/cfgrtl.c,v
 > retrieving revision 1.158
 > diff -u -p -d -r1.158 cfgrtl.c
 > --- cfgrtl.c	14 Feb 2005 11:37:52 -0000	1.158
 > +++ cfgrtl.c	17 May 2005 23:55:31 -0000
 > @@ -527,6 +527,10 @@ rtl_merge_blocks (basic_block a, basic_b
 >    /* If there was a CODE_LABEL beginning B, delete it.  */
 >    if (LABEL_P (b_head))
 >      {
 > +      /* This might have been an EH label that no longer has incoming
 > +	 EH edges.  Update data structures to match.  */
 > +      maybe_remove_eh_handler (b_head);
 > +
 >        /* Detect basic blocks with nothing but a label.  This can happen
 >  	 in particular at the end of a function.  */
 >        if (b_head == b_end)
 > @@ -2749,7 +2753,10 @@ cfg_layout_merge_blocks (basic_block a, 
 >  
 >    /* If there was a CODE_LABEL beginning B, delete it.  */
 >    if (LABEL_P (BB_HEAD (b)))
 > -    delete_insn (BB_HEAD (b));
 > +    {
 > +      maybe_remove_eh_handler (BB_HEAD (b));
 > +      delete_insn (BB_HEAD (b));
 > +    }
 >  
 >    /* We should have fallthru edge in a, or we can do dummy redirection to get
 >       it cleaned up.  */


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