Commit cd3ca6cb by Jason Merrill Committed by Jason Merrill

Remove constexpr support for DECL_BY_REFERENCE.

Since we switched to doing constexpr evaluation on pre-GENERIC trees,
we don't have to handle DECL_BY_REFERENCE.

	* constexpr.c (cxx_eval_call_expression): Remove DECL_BY_REFERENCE
	support.

From-SVN: r280017
parent 5b18be0b
2020-01-08 Jason Merrill <jason@redhat.com>
* constexpr.c (cxx_eval_call_expression): Remove DECL_BY_REFERENCE
support.
2020-01-07 Paolo Carlini <paolo.carlini@oracle.com> 2020-01-07 Paolo Carlini <paolo.carlini@oracle.com>
* init.c (build_new): Add location_t parameter and use it throughout. * init.c (build_new): Add location_t parameter and use it throughout.
......
...@@ -2333,17 +2333,8 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, ...@@ -2333,17 +2333,8 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
remapped = DECL_CHAIN (remapped); remapped = DECL_CHAIN (remapped);
} }
/* Add the RESULT_DECL to the values map, too. */ /* Add the RESULT_DECL to the values map, too. */
tree slot = NULL_TREE; gcc_assert (!DECL_BY_REFERENCE (res));
if (DECL_BY_REFERENCE (res)) ctx->global->values.put (res, NULL_TREE);
{
slot = AGGR_INIT_EXPR_SLOT (t);
tree addr = build_address (slot);
addr = build_nop (TREE_TYPE (res), addr);
ctx->global->values.put (res, addr);
ctx->global->values.put (slot, NULL_TREE);
}
else
ctx->global->values.put (res, NULL_TREE);
/* Track the callee's evaluated SAVE_EXPRs and TARGET_EXPRs so that /* Track the callee's evaluated SAVE_EXPRs and TARGET_EXPRs so that
we can forget their values after the call. */ we can forget their values after the call. */
...@@ -2370,7 +2361,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, ...@@ -2370,7 +2361,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
result = void_node; result = void_node;
else else
{ {
result = *ctx->global->values.get (slot ? slot : res); result = *ctx->global->values.get (res);
if (result == NULL_TREE && !*non_constant_p) if (result == NULL_TREE && !*non_constant_p)
{ {
if (!ctx->quiet) if (!ctx->quiet)
...@@ -2409,8 +2400,6 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t, ...@@ -2409,8 +2400,6 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
one constexpr evaluation? If so, maybe also clear out one constexpr evaluation? If so, maybe also clear out
other vars from call, maybe in BIND_EXPR handling? */ other vars from call, maybe in BIND_EXPR handling? */
ctx->global->values.remove (res); ctx->global->values.remove (res);
if (slot)
ctx->global->values.remove (slot);
for (tree parm = parms; parm; parm = TREE_CHAIN (parm)) for (tree parm = parms; parm; parm = TREE_CHAIN (parm))
ctx->global->values.remove (parm); ctx->global->values.remove (parm);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment