Remove constexpr support for DECL_BY_REFERENCE.
authorJason Merrill <jason@redhat.com>
Wed, 8 Jan 2020 20:31:16 +0000 (15:31 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 8 Jan 2020 20:31:16 +0000 (15:31 -0500)
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

gcc/cp/ChangeLog
gcc/cp/constexpr.c

index 1655cafb9ab000bfac8e46bb5a90599a9452157c..c650fdeb5900d1192fac0d778f29b724bf56d904 100644 (file)
@@ -1,3 +1,8 @@
+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>
 
        * init.c (build_new): Add location_t parameter and use it throughout.
index 417af182a2a6dc68d50afe39bce50839f371645a..806d3ab2cffbe520949884f7522c4da0b2250d41 100644 (file)
@@ -2333,17 +2333,8 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
              remapped = DECL_CHAIN (remapped);
            }
          /* Add the RESULT_DECL to the values map, too.  */
-         tree slot = NULL_TREE;
-         if (DECL_BY_REFERENCE (res))
-           {
-             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);
+         gcc_assert (!DECL_BY_REFERENCE (res));
+         ctx->global->values.put (res, NULL_TREE);
 
          /* Track the callee's evaluated SAVE_EXPRs and TARGET_EXPRs so that
             we can forget their values after the call.  */
@@ -2370,7 +2361,7 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
            result = void_node;
          else
            {
-             result = *ctx->global->values.get (slot ? slot : res);
+             result = *ctx->global->values.get (res);
              if (result == NULL_TREE && !*non_constant_p)
                {
                  if (!ctx->quiet)
@@ -2409,8 +2400,6 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
             one constexpr evaluation?  If so, maybe also clear out
             other vars from call, maybe in BIND_EXPR handling?  */
          ctx->global->values.remove (res);
-         if (slot)
-           ctx->global->values.remove (slot);
          for (tree parm = parms; parm; parm = TREE_CHAIN (parm))
            ctx->global->values.remove (parm);