https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61548
--- Comment #27 from Jan Hubicka <hubicka at gcc dot gnu.org> --- Does the following patch fix the problem? Index: tree-emutls.c =================================================================== --- tree-emutls.c (revision 220509) +++ tree-emutls.c (working copy) @@ -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 ()); }