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 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;
}

The problem is two fold, first the tree inliner is not updating
the TREE_INVARIANT correctly on the &a so we don't get TREE_INVARIANT
set on it.

The next problem is that the forward propagation assumes that propagating of
ADDR_EXPR should not cause us to get rid of a way to throw which is wrong,
though I cannot prove it without honza's patch in.


Thanks,
Andrew Pinski


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