On Mon, 2011-11-21 at 14:58 -0800, Richard Henderson wrote:
> On 11/21/2011 01:58 PM, Torvald Riegel wrote:
> > On Mon, 2011-11-21 at 13:45 -0800, Richard Henderson wrote:
> >> On 11/21/2011 01:39 PM, Torvald Riegel wrote:
> >>> It still fails when combined
> >>> with transaction expressions (noexcept-4.C and noexcept-1.C) because
> >>> gimplify_must_not_throw_expr() calls voidify_wrapper_expr() on a
> >>> MUST_NOT_THROW_EXPR which it doesn't know to be a wrapper.  What's the
> >>> cleanest way to solve that?  Adding handling of MUST_NOT_THROW_EXPR
> >>> inside voidify_... will include C++ stuff there, right?  Or should there
> >>> be a C++ version of voidify_...?  Or something else?
> >>
> >> What's happening below gimplify_must_not_throw_expr?
> >>
> >> That *ought* to be recursing into voidify_wrapper_expr and
> >> doing the right thing.
> > 
> > gimplify_must_not_throw_expr does call voidify_wrapper_expr, with the
> > assumption that the latter understands that MNTE is a wrapper, and will
> > change the code contained in the wrapper (so, change the MNTE itself).
> > I thought about changing voidify_wrapper_expr so that its first argument
> > is a pointer to a tree, so that one can voidify the contained/inner
> > stuff even when the caller has already skipped a wrapper (MNTE in our
> > case).  But this didn't seem to be clearer either.
> 
> Try this, as discussed with Jason on IRC.

Works for me, no regressions. I'll look at Jason's patch later, and
adapt the transaction noexcept stuff. Thanks!

Torvald

Reply via email to