On 3/25/21 4:33 PM, Jakub Jelinek wrote:
On Thu, Mar 25, 2021 at 04:20:54PM -0400, Jason Merrill wrote:
but it is also cp_walk_subtrees DECL_EXPR handling:
      case DECL_EXPR:
        /* User variables should be mentioned in BIND_EXPR_VARS
           and their initializers and sizes walked when walking
           the containing BIND_EXPR.  Compiler temporaries are
           handled here.  And also normal variables in templates,
           since do_poplevel doesn't build a BIND_EXPR then.  */
        if (VAR_P (TREE_OPERAND (*tp, 0))
            && (processing_template_decl
                || (DECL_ARTIFICIAL (TREE_OPERAND (*tp, 0))
                    && !TREE_STATIC (TREE_OPERAND (*tp, 0)))))
          {

What if we WALK_SUBTREE (DECL_EXPR_DECL (*tp)) here, instead of the
bot_replace hunk?  OK either way.

The above hunk is cp_walk_subtrees, we shouldn't change that IMO.
We could do it in bot_manip instead of bot_replace by doing roughly:
   if (TREE_CODE (*tp) == DECL_EXPR
       && VAR_P (DECL_EXPR_DECL (*tp))
       && DECL_ARTIFICIAL (DECL_EXPR_DECL (*tp))
       && !TREE_STATIC (DECL_EXPR_DECL (*tp)))
     {
       tree t;
       splay_tree_node n
        = splay_tree_lookup (target_remap,
                             (splay_tree_key) DECL_EXPR_DECL (*tp));
       if (n)
        t = (tree) n->value;
       else
        {
          t = create_temporary_var (TREE_TYPE (DECL_EXPR_DECL (*tp)));
          DECL_INITIAL (t) = DECL_INITIAL (DECL_EXPR_DECL (*tp));
          splay_tree_insert (target_remap,
                             (splay_tree_key) DECL_EXPR_DECL (*tp),
                             (splay_tree_value) t);
        }
       copy_tree_r (tp, walk_subtrees, NULL);
       DECL_EXPR_DECL (*tp) = t;
       if (data.clear_location && EXPR_HAS_LOCATION (*tp))
        SET_EXPR_LOCATION (*tp, input_location);
       return NULL_TREE;
     }
plus the current BIND_EXPR handling afterwards.  I.e. update
DECL_EXPR_DECL of the DECL_EXPR right away in bot_manip rather than
waiting until bot_replace with that.

If you prefer that, I can test it tonight.

Sure, let's go with this version.

Jason

Reply via email to