re PR ipa/61548 (FAIL: gcc.dg/tls/alias-1.c)
authorJan Hubicka <hubicka@ucw.cz>
Mon, 9 Feb 2015 21:06:35 +0000 (22:06 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Mon, 9 Feb 2015 21:06:35 +0000 (21:06 +0000)
PR ipa/61548
* tree-emutls.c (ipa_lower_emutls): Avoid duplicates in TLS_VARS.

From-SVN: r220549

gcc/ChangeLog
gcc/tree-emutls.c

index 5f7c621..2791de6 100644 (file)
@@ -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.
index 68b2aae..b4711a5 100644 (file)
@@ -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 ());
       }