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.

Torvald

Reply via email to