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