aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2015-02-09 22:06:35 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2015-02-09 21:06:35 +0000
commit6248441777104cf224e58669aaeb858310b9f668 (patch)
tree0e603acc6dfe85375a6f585b86a993cc49626d12 /gcc
parent106b54666459294e68b176e2f2e811e488158880 (diff)
downloadgcc-6248441777104cf224e58669aaeb858310b9f668.zip
gcc-6248441777104cf224e58669aaeb858310b9f668.tar.gz
gcc-6248441777104cf224e58669aaeb858310b9f668.tar.bz2
re PR ipa/61548 (FAIL: gcc.dg/tls/alias-1.c)
PR ipa/61548 * tree-emutls.c (ipa_lower_emutls): Avoid duplicates in TLS_VARS. From-SVN: r220549
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-emutls.c8
2 files changed, 10 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5f7c621..2791de6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2015-02-08 Jan Hubicka <hubicka@ucw.cz>
+ PR ipa/61548
+ * tree-emutls.c (ipa_lower_emutls): Avoid duplicates in TLS_VARS.
+
+2015-02-08 Jan Hubicka <hubicka@ucw.cz>
+
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 68b2aae..b4711a5 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 <varpool_node *> visited;
auto_vec <varpool_node *> 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 ());
}