* cp-gimplify.c (cp_gimplify_expr) [TARGET_EXPR]: Check
TARGET_EXPR_DIRECT_INIT_P.
* constexpr.c (cxx_eval_constant_expression): Likewise.
From-SVN: r280019
2020-01-08 Jason Merrill <jason@redhat.com>
+ * cp-gimplify.c (cp_gimplify_expr) [TARGET_EXPR]: Check
+ TARGET_EXPR_DIRECT_INIT_P.
+ * constexpr.c (cxx_eval_constant_expression): Likewise.
+
+2020-01-08 Jason Merrill <jason@redhat.com>
+
PR c++/91369 - constexpr destructor and member initializer.
* constexpr.c (cxx_eval_store_expression): Look through TARGET_EXPR
when not preevaluating.
*non_constant_p = true;
break;
}
+ gcc_checking_assert (!TARGET_EXPR_DIRECT_INIT_P (t));
/* Avoid evaluating a TARGET_EXPR more than once. */
if (tree *p = ctx->global->values.get (TARGET_EXPR_SLOT (t)))
{
}
break;
+ case TARGET_EXPR:
+ /* A TARGET_EXPR that expresses direct-initialization should have been
+ elided by cp_gimplify_init_expr. */
+ gcc_checking_assert (!TARGET_EXPR_DIRECT_INIT_P (*expr_p));
+ ret = GS_UNHANDLED;
+ break;
+
case RETURN_EXPR:
if (TREE_OPERAND (*expr_p, 0)
&& (TREE_CODE (TREE_OPERAND (*expr_p, 0)) == INIT_EXPR