Patch PING: PR middle-end/21362: ICE in make_edges, at cfgbuild.c:327
Andrew Haley
aph@redhat.com
Mon May 15 14:56:00 GMT 2006
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.
Hmm. Although the particular ICE that caused this PR is gone, an
adjacent file in the same archive triggers a suspiciously similar
failure in the same area of the compiler.
Please have a look at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27590.
Andrew.
> 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. */
More information about the Gcc-patches
mailing list