This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/38587] [4.4 Regression] psim miscompiled #2
- From: "hjl dot tools at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 20 Jan 2009 15:08:37 -0000
- Subject: [Bug middle-end/38587] [4.4 Regression] psim miscompiled #2
- References: <bug-38587-296@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #25 from hjl dot tools at gmail dot com 2009-01-20 15:08 -------
(In reply to comment #24)
> Subject: Re: [4.4 Regression] psim miscompiled #2
>
> On Tue, 20 Jan 2009, hjl dot tools at gmail dot com wrote:
>
> > ------- Comment #23 from hjl dot tools at gmail dot com 2009-01-20 14:24 -------
> > (In reply to comment #22)
> > > From tree-inline.c:
> > >
> > > case BUILT_IN_LONGJMP:
> > > /* We can't inline functions that call __builtin_longjmp at
> > > all. The non-local goto machinery really requires the
> > > destination be in a different function. If we allow the
> > > function calling __builtin_longjmp to be inlined into the
> > > function calling __builtin_setjmp, Things will Go Awry. */
> > >
> > > so IMHO we shouldn't inline foo (). See inline_forbidden_p_stmt.
> > >
> >
> > foo () isn't inlined. We inline bar () which reuses stack slot used
> > to restore registers after longjmp, which is called from foo ().
>
> Still I don't think this is an IRA bug. Either this code is sort-of
> non-conforming or we need to throttle down inlining more.
>
Since -fno-ira works, I think it may be fixed in IRA if we can
properly mark stack slots used to restore registers after setjmp.
FWIW, bar () is marked as inline in sim.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38587