http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46510
--- Comment #25 from Dominique d'Humieres <dominiq at lps dot ens.fr> 2010-11-21 18:37:09 UTC --- This seems to work: --- ../_clean/gcc/tree-emutls.c 2010-11-19 18:13:00.000000000 +0100 +++ gcc/tree-emutls.c 2010-11-21 19:34:11.000000000 +0100 @@ -257,7 +257,12 @@ get_emutls_init_templ_addr (tree decl) targetm.emutls.tmpl_section); } - varpool_finalize_decl (to); + /* Create varpool node for the new variable and finalize it if it is + not external one. */ + if (DECL_EXTERNAL (to)) + varpool_node (to); + else + varpool_finalize_decl (to); return build_fold_addr_expr (to); } @@ -324,7 +329,12 @@ new_emutls_decl (tree decl) record_references_in_initializer (to, false); } - varpool_finalize_decl (to); + /* Create varpool node for the new variable and finalize it if it is + not external one. */ + if (DECL_EXTERNAL (to)) + varpool_node (to); + else + varpool_finalize_decl (to); return to; }