From 770eccb8a56c4986c094bd27a3fff310bcfd0d3c Mon Sep 17 00:00:00 2001 From: hubicka Date: Mon, 9 Feb 2015 21:06:35 +0000 Subject: [PATCH] PR ipa/61548 * tree-emutls.c (ipa_lower_emutls): Avoid duplicates in TLS_VARS. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@220549 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/tree-emutls.c | 8 +++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5f7c6214a3e..2791de6c4f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2015-02-08 Jan Hubicka + PR ipa/61548 + * tree-emutls.c (ipa_lower_emutls): Avoid duplicates in TLS_VARS. + +2015-02-08 Jan Hubicka + PR ipa/63566 * ipa-icf.c (set_local): New function. (sem_function::merge): Use it. diff --git a/gcc/tree-emutls.c b/gcc/tree-emutls.c index 68b2aae5e70..b4711a59c6b 100644 --- a/gcc/tree-emutls.c +++ b/gcc/tree-emutls.c @@ -753,17 +753,19 @@ ipa_lower_emutls (void) cgraph_node *func; bool any_aliases = false; tree ctor_body = NULL; - + hash_set visited; auto_vec tls_vars; /* Examine all global variables for TLS variables. */ FOR_EACH_VARIABLE (var) - if (DECL_THREAD_LOCAL_P (var->decl)) + if (DECL_THREAD_LOCAL_P (var->decl) + && !visited.add (var)) { gcc_checking_assert (TREE_STATIC (var->decl) || DECL_EXTERNAL (var->decl)); tls_vars.safe_push (var); - if (var->alias && var->definition) + if (var->alias && var->definition + && !visited.add (var->ultimate_alias_target ())) tls_vars.safe_push (var->ultimate_alias_target ()); } -- 2.11.4.GIT