Hi Jason.
Here is another independent patch factored out from the debug-early work.
I believe you approved this already, and was merely queued for stage1.
I have tested this independently of any other patch and would like
permission to commit it to mainline.
OK?
commit 899570880aca6c3d2e6e85fddd80946648d2d352
Author: Aldy Hernandez <al...@redhat.com>
Date: Fri May 8 16:31:06 2015 -0700
* 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.
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index bd9f2f3..9f9c4e3 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,12 @@
+2015-05-08 Aldy Hernandez <al...@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-04 Paolo Carlini <paolo.carl...@oracle.com>
Jakub Jelinek <ja...@redhat.com>
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index b2251d8..b3c98da 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -3987,20 +3987,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;
@@ -4009,55 +4006,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);
}
}
}
@@ -4390,7 +4350,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;
@@ -4741,8 +4700,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);
@@ -4782,13 +4741,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