diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2015-05-09 03:28:40 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2015-05-09 03:28:40 +0000 |
commit | 09c5f835e7ca90b344a6471acbe360fc33b77fa7 (patch) | |
tree | d21d028ef26baf53318c2bc396a637777bf3427e /gcc/cp | |
parent | 9c330d029c2a6a58de6bf37851e4f650ef9d40a1 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 74 |
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 |