aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-nested.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2018-06-21 17:01:12 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2018-06-21 17:01:12 +0000
commit575b192558435f0128e6f71afb95d002cdef835e (patch)
tree31a1264f0d74e079d431821c1c9ff7de7cd5410d /gcc/tree-nested.c
parent29cbd18b58a4fa3f2ee57b25df270cec5a4d1adf (diff)
downloadgcc-575b192558435f0128e6f71afb95d002cdef835e.zip
gcc-575b192558435f0128e6f71afb95d002cdef835e.tar.gz
gcc-575b192558435f0128e6f71afb95d002cdef835e.tar.bz2
tree-nested.c (get_frame_type): Use create_tmp_var_raw instead of create_tmp_var_for to create the FRAME decl.
* 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. From-SVN: r261854
Diffstat (limited to 'gcc/tree-nested.c')
-rw-r--r--gcc/tree-nested.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c
index 257ceae..127a81f 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);
}