aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2015-05-09 03:28:40 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2015-05-09 03:28:40 +0000
commit09c5f835e7ca90b344a6471acbe360fc33b77fa7 (patch)
treed21d028ef26baf53318c2bc396a637777bf3427e /gcc/cp
parent9c330d029c2a6a58de6bf37851e4f650ef9d40a1 (diff)
downloadgcc-09c5f835e7ca90b344a6471acbe360fc33b77fa7.zip
gcc-09c5f835e7ca90b344a6471acbe360fc33b77fa7.tar.gz
gcc-09c5f835e7ca90b344a6471acbe360fc33b77fa7.tar.bz2
decl2.c (collect_candidates_for_java_method_aliases): Remove.
* decl2.c (collect_candidates_for_java_method_aliases): Remove. (build_java_method_aliases): Adapt to use create_same_body_alias instead of assemble_alias. Move variable declarations to definition and tidy up. (cp_write_global_declarations): Call build_java_method_aliases instead of collecting candidates first. From-SVN: r222933
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog9
-rw-r--r--gcc/cp/decl2.c74
2 files changed, 22 insertions, 61 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8427e9d..1fbf765 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,12 @@
+2015-05-08 Aldy Hernandez <aldyh@redhat.com>
+
+ * decl2.c (collect_candidates_for_java_method_aliases): Remove.
+ (build_java_method_aliases): Adapt to use create_same_body_alias
+ instead of assemble_alias. Move variable declarations to
+ definition and tidy up.
+ (cp_write_global_declarations): Call build_java_method_aliases
+ instead of collecting candidates first.
+
2015-05-07 Jason Merrill <jason@redhat.com>
PR c++/59012
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 2276bd6..dcc5e1f 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -3996,20 +3996,17 @@ generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
}
/* Java requires that we be able to reference a local address for a
- method, and not be confused by PLT entries. If hidden aliases are
- supported, collect and return all the functions for which we should
- emit a hidden alias. */
+ method, and not be confused by PLT entries. If supported, create a
+ hidden alias for all such methods. */
-static hash_set<tree> *
-collect_candidates_for_java_method_aliases (void)
+static void
+build_java_method_aliases (void)
{
- struct cgraph_node *node;
- hash_set<tree> *candidates = NULL;
-
#ifndef HAVE_GAS_HIDDEN
- return candidates;
+ return;
#endif
+ struct cgraph_node *node;
FOR_EACH_FUNCTION (node)
{
tree fndecl = node->decl;
@@ -4018,55 +4015,18 @@ collect_candidates_for_java_method_aliases (void)
&& TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
&& TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
{
- if (candidates == NULL)
- candidates = new hash_set<tree>;
- candidates->add (fndecl);
- }
- }
-
- return candidates;
-}
-
-
-/* Java requires that we be able to reference a local address for a
- method, and not be confused by PLT entries. If hidden aliases are
- supported, emit one for each java function that we've emitted.
- CANDIDATES is the set of FUNCTION_DECLs that were gathered
- by collect_candidates_for_java_method_aliases. */
-
-static void
-build_java_method_aliases (hash_set<tree> *candidates)
-{
- struct cgraph_node *node;
-
-#ifndef HAVE_GAS_HIDDEN
- return;
-#endif
-
- FOR_EACH_FUNCTION (node)
- {
- tree fndecl = node->decl;
-
- if (TREE_ASM_WRITTEN (fndecl)
- && candidates->contains (fndecl))
- {
/* Mangle the name in a predictable way; we need to reference
this from a java compiled object file. */
- tree oid, nid, alias;
- const char *oname;
- char *nname;
-
- oid = DECL_ASSEMBLER_NAME (fndecl);
- oname = IDENTIFIER_POINTER (oid);
+ tree oid = DECL_ASSEMBLER_NAME (fndecl);
+ const char *oname = IDENTIFIER_POINTER (oid);
gcc_assert (oname[0] == '_' && oname[1] == 'Z');
- nname = ACONCAT (("_ZGA", oname+2, NULL));
- nid = get_identifier (nname);
+ char *nname = ACONCAT (("_ZGA", oname + 2, NULL));
- alias = make_alias_for (fndecl, nid);
+ tree alias = make_alias_for (fndecl, get_identifier (nname));
TREE_PUBLIC (alias) = 1;
DECL_VISIBILITY (alias) = VISIBILITY_HIDDEN;
- assemble_alias (alias, oid);
+ cgraph_node::create_same_body_alias (alias, fndecl);
}
}
}
@@ -4399,7 +4359,6 @@ cp_write_global_declarations (void)
unsigned ssdf_count = 0;
int retries = 0;
tree decl;
- hash_set<tree> *candidates;
locus = input_location;
at_eof = 1;
@@ -4750,8 +4709,8 @@ cp_write_global_declarations (void)
linkage now. */
pop_lang_context ();
- /* Collect candidates for Java hidden aliases. */
- candidates = collect_candidates_for_java_method_aliases ();
+ /* Generate Java hidden aliases. */
+ build_java_method_aliases ();
timevar_stop (TV_PHASE_DEFERRED);
timevar_start (TV_PHASE_OPT_GEN);
@@ -4791,13 +4750,6 @@ cp_write_global_declarations (void)
perform_deferred_noexcept_checks ();
- /* Generate hidden aliases for Java. */
- if (candidates)
- {
- build_java_method_aliases (candidates);
- delete candidates;
- }
-
finish_repo ();
/* The entire file is now complete. If requested, dump everything