aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2013-05-18 00:15:47 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2013-05-17 22:15:47 +0000
commit8ee05051146a7a571a2a65b3205854def9a757ba (patch)
tree26a9f13a6ab5c370d095e513433b24bb37bf8aad /gcc
parentc3272a921a1492fcc4e437580d718f423f4e32db (diff)
downloadgcc-8ee05051146a7a571a2a65b3205854def9a757ba.zip
gcc-8ee05051146a7a571a2a65b3205854def9a757ba.tar.gz
gcc-8ee05051146a7a571a2a65b3205854def9a757ba.tar.bz2
lto-partition.c (privatize_symbol_name): Return true when privatizing happened.
* lto-partition.c (privatize_symbol_name): Return true when privatizing happened. (rename_statics): Do not go into infinite loop when privatizing is not needed. From-SVN: r199040
Diffstat (limited to 'gcc')
-rw-r--r--gcc/lto/ChangeLog7
-rw-r--r--gcc/lto/lto-partition.c16
2 files changed, 16 insertions, 7 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 965b555..3ea106b 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,10 @@
+2013-05-15 Jan Hubicka <jh@suse.cz>
+
+ * lto-partition.c (privatize_symbol_name): Return true when
+ privatizing happened.
+ (rename_statics): Do not go into infinite loop when privatizing
+ is not needed.
+
2013-05-16 Jason Merrill <jason@redhat.com>
* Make-lang.in ($(LTO_EXE)): Use link mutex.
diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c
index b5d3247..62341c1 100644
--- a/gcc/lto/lto-partition.c
+++ b/gcc/lto/lto-partition.c
@@ -766,7 +766,7 @@ lto_balanced_map (void)
with symbols defined out of the LTO world.
*/
-static void
+static bool
privatize_symbol_name (symtab_node node)
{
tree decl = node->symbol.decl;
@@ -781,7 +781,7 @@ privatize_symbol_name (symtab_node node)
fprintf (cgraph_dump_file,
"Not privatizing symbol name: %s. It privatized already.\n",
name);
- return;
+ return false;
}
/* Avoid mangling of already mangled clones.
??? should have a flag whether a symbol has a 'private' name already,
@@ -793,7 +793,7 @@ privatize_symbol_name (symtab_node node)
fprintf (cgraph_dump_file,
"Not privatizing symbol name: %s. Has unique name.\n",
name);
- return;
+ return false;
}
change_decl_assembler_name (decl, clone_function_name (decl, "lto_priv"));
if (node->symbol.lto_file_data)
@@ -804,6 +804,7 @@ privatize_symbol_name (symtab_node node)
fprintf (cgraph_dump_file,
"Privatizing symbol name: %s -> %s\n",
name, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
+ return true;
}
/* Promote variable VNODE to be static. */
@@ -906,11 +907,12 @@ rename_statics (lto_symtab_encoder_t encoder, symtab_node node)
&& (!encoder
|| lto_symtab_encoder_lookup (encoder, s) != LCC_NOT_FOUND))
{
- privatize_symbol_name (s);
- /* Re-start from beggining since we do not know how many symbols changed a name. */
- s = symtab_node_for_asm (name);
+ if (privatize_symbol_name (s))
+ /* Re-start from beggining since we do not know how many symbols changed a name. */
+ s = symtab_node_for_asm (name);
+ else s = s->symbol.next_sharing_asm_name;
}
- else s = s->symbol.next_sharing_asm_name;
+ else s = s->symbol.next_sharing_asm_name;
}
/* Find out all static decls that need to be promoted to global because