On 6/20/19 10:46 AM, Marek Polacek wrote:
The first test is rejected because build_noexcept_spec first converts
a TARGET_EXPR using a user-defined conversion, creating

   R::operator bool (&TARGET_EXPR <D.2323, {}>)

which then fails when instantiating ("taking address of rvalue").

The second test ICEs in verify_ctor_sanity because there was no ctx.ctor
when evaluating the TARGET_EXPR.  That is expected, because we create
constructors for class and vector types (and PMFs I guess) only, not for
scalars.  We need finish_compound_literal to turn

   TARGET_EXPR <D.2306, {}>

into

   TARGET_EXPR <D.2307, 0>

Fixed both by handling the noexcept expr like we handle the explicit expr in
build_explicit_specifier.

Bootstrapped/regtested on x86_64-linux, ok for trunk and 9?

OK, though this pattern still seems fragile.  I'll try to poke at it soon.

Jason

Reply via email to