From 79351eaf305cdac3a2e3f31ee481bdd3e4db6fc5 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Thu, 21 Jun 2018 17:01:12 +0000 Subject: [PATCH] * tree-nested.c (get_frame_type): Use create_tmp_var_raw instead of create_tmp_var_for to create the FRAME decl. (finalize_nesting_tree_1): Do not unchain the FRAME decl. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@261854 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/tree-nested.c | 22 +++++++++------------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b76ae5a7902..0550afb5942 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2018-06-21 Eric Botcazou + * tree-nested.c (get_frame_type): Use create_tmp_var_raw instead of + create_tmp_var_for to create the FRAME decl. + (finalize_nesting_tree_1): Do not unchain the FRAME decl. + +2018-06-21 Eric Botcazou + * tree-inline.c (copy_edges_for_bb): Minor tweak. (maybe_move_debug_stmts_to_successors): Also reset the locus of the debug statement when resetting its value. diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c index 257ceae6f2d..127a81f9973 100644 --- a/gcc/tree-nested.c +++ b/gcc/tree-nested.c @@ -223,8 +223,15 @@ get_frame_type (struct nesting_info *info) free (name); info->frame_type = type; - info->frame_decl = create_tmp_var_for (info, type, "FRAME"); + + /* Do not put info->frame_decl on info->new_local_var_chain, + so that we can declare it in the lexical blocks, which + makes sure virtual regs that end up appearing in its RTL + expression get substituted in instantiate_virtual_regs. */ + info->frame_decl = create_tmp_var_raw (type, "FRAME"); + DECL_CONTEXT (info->frame_decl) = info->context; DECL_NONLOCAL_FRAME (info->frame_decl) = 1; + DECL_SEEN_IN_BIND_EXPR_P (info->frame_decl) = 1; /* ??? Always make it addressable for now, since it is meant to be pointed to by the static chain pointer. This pessimizes @@ -234,6 +241,7 @@ get_frame_type (struct nesting_info *info) local frame structure in the first place. */ TREE_ADDRESSABLE (info->frame_decl) = 1; } + return type; } @@ -3117,18 +3125,6 @@ finalize_nesting_tree_1 (struct nesting_info *root) gimple_seq_add_stmt (&stmt_list, gimple_build_assign (fb_ref, fb_tmp)); - /* Remove root->frame_decl from root->new_local_var_chain, so - that we can declare it also in the lexical blocks, which - helps ensure virtual regs that end up appearing in its RTL - expression get substituted in instantiate_virtual_regs(). */ - tree *adjust; - for (adjust = &root->new_local_var_chain; - *adjust != root->frame_decl; - adjust = &DECL_CHAIN (*adjust)) - gcc_assert (DECL_CHAIN (*adjust)); - *adjust = DECL_CHAIN (*adjust); - - DECL_CHAIN (root->frame_decl) = NULL_TREE; declare_vars (root->frame_decl, gimple_seq_first_stmt (gimple_body (context)), true); } -- 2.11.4.GIT