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: Removing unnecessary ADDR_EXPRs


On Tue, 2005-05-17 at 16:46 -0400, Andrew Pinski wrote:
> On May 17, 2005, at 2:49 PM, Jeffrey A Law wrote:
> 
> > Nope.  Still not getting that failure.  Though after updating I am
> > getting a failure in libjava:
> >
> > /fuel98/export/virgin/libjava/jni.cc:2141: error: Statement marked for
> > throw, but doesn't.
> > #   VUSE <D.15186_67(ab)>;
> > D.28047_69 = D.15186;
> >
> > /fuel98/export/virgin/libjava/jni.cc:2141: internal compiler error:
> > verify_stmts failed.
> 
> 
> The reduced testcase for the above failure is.
> Compile with "-O2 -fnon-call-exceptions":
> struct f { int i; };
> inline int *f1(f *a){return &a->i;}
> int g()throw()
> {
>    f a;
>    int *i = f1(&a);
>    return *i;
> }
This should be fixed now.  Unlike most of our other optimizers forward
propagation is _moving_ expression evaluations, particularly those which
could potentially fault (thus triggering an exception).   When we move
expression evaluations we have to be cognizant of exception regions.
Specifically we can not move evaluation of an expression into a
different EH region.

The patch has been bootstrapped and regression tested on
i686-pc-linux-gnu.  Libjava builds again (of course).


Attachment: PPP
Description: Text document


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