aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorStrager Neds <strager.nds@gmail.com>2020-11-10 11:42:01 -0700
committerJeff Law <law@redhat.com>2020-11-10 11:44:15 -0700
commit8b9a92f794b8ad8011e6beb11a609efa635c4600 (patch)
tree015dae9357148c23ef517657a3b019656fd2ebd0 /gcc/tree.c
parent5e41e7f0928de55d189475fc14f7e6c9737cd507 (diff)
downloadgcc-8b9a92f794b8ad8011e6beb11a609efa635c4600.zip
gcc-8b9a92f794b8ad8011e6beb11a609efa635c4600.tar.gz
gcc-8b9a92f794b8ad8011e6beb11a609efa635c4600.tar.bz2
Refactor copying decl section names
gcc/ * cgraph.h (symtab_node::get_section): Constify. (symtab_node::set_section): Declare new overload. * symtab.c (symtab_node::set_section): Define new overload. (symtab_node::copy_visibility_from): Use new overload of symtab_node::set_section. (symtab_node::resolve_alias): Same. * tree.h (set_decl_section_name): Declare new overload. * tree.c (set_decl_section_name): Define new overload. * tree-emutls.c (get_emutls_init_templ_addr): Same. * cgraphclones.c (cgraph_node::create_virtual_clone): Use new overload of symtab_node::set_section. (cgraph_node::create_version_clone_with_body): Same. * trans-mem.c (ipa_tm_create_version): Same. gcc/c * c-decl.c (merge_decls): Use new overload of set_decl_section_name. gcc/cp * decl.c (duplicate_decls): Use new overload of set_decl_section_name. * method.c (use_thunk): Same. * optimize.c (maybe_clone_body): Same. * coroutines.cc (act_des_fn): Same. gcc/d * decl.cc (finish_thunk): Use new overload of set_decl_section_name
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 9260772..663f3ec 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -773,6 +773,33 @@ set_decl_section_name (tree node, const char *value)
snode->set_section (value);
}
+/* Set section name of NODE to match the section name of OTHER.
+
+ set_decl_section_name (decl, other) is equivalent to
+ set_decl_section_name (decl, DECL_SECTION_NAME (other)), but possibly more
+ efficient. */
+void
+set_decl_section_name (tree decl, const_tree other)
+{
+ struct symtab_node *other_node = symtab_node::get (other);
+ if (other_node)
+ {
+ struct symtab_node *decl_node;
+ if (VAR_P (decl))
+ decl_node = varpool_node::get_create (decl);
+ else
+ decl_node = cgraph_node::get_create (decl);
+ decl_node->set_section (*other_node);
+ }
+ else
+ {
+ struct symtab_node *decl_node = symtab_node::get (decl);
+ if (!decl_node)
+ return;
+ decl_node->set_section (NULL);
+ }
+}
+
/* Return TLS model of a variable NODE. */
enum tls_model
decl_tls_model (const_tree node)