$subject because if we put anything decl-ish there (set_decl_origin_self...) then we run into lto_fixup_prevailing_decls ICEing as the state is now no longer the same as during the time we called mentions_vars_p.
Bootstrap / regtest running on x86_64-unknown-linux-gnu. Richard. 2017-08-03 Richard Biener <rguent...@suse.de> lto/ * lto-symtab.h (lto_symtab_prevail_decl): Do not use DECL_ABSTRACT_ORIGIN as flag we can end up using that. Instead use DECL_LANG_FLAG_0. (lto_symtab_prevail_decl): Likewise. Index: gcc/lto/lto-symtab.h =================================================================== --- gcc/lto/lto-symtab.h (revision 250817) +++ gcc/lto/lto-symtab.h (working copy) @@ -23,7 +23,7 @@ extern tree lto_symtab_prevailing_decl ( extern tree lto_symtab_prevailing_virtual_decl (tree decl); /* Mark DECL to be previailed by PREVAILING. - Use DECL_ABSTRACT_ORIGIN and DECL_CHAIN as special markers; those do not + Use DECL_LANG_FLAG_0 and DECL_CHAIN as special markers; those do not disturb debug_tree and diagnostics. We are safe to modify them as we wish, because the declarations disappear from the IL after the merging. */ @@ -31,10 +31,10 @@ extern tree lto_symtab_prevailing_virtua inline void lto_symtab_prevail_decl (tree prevailing, tree decl) { - gcc_checking_assert (DECL_ABSTRACT_ORIGIN (decl) != error_mark_node); + gcc_checking_assert (! DECL_LANG_FLAG_0 (decl)); gcc_assert (TREE_PUBLIC (decl) || DECL_EXTERNAL (decl)); DECL_CHAIN (decl) = prevailing; - DECL_ABSTRACT_ORIGIN (decl) = error_mark_node; + DECL_LANG_FLAG_0 (decl) = 1; } /* Given the decl DECL, return the prevailing decl with the same name. */ @@ -42,7 +42,7 @@ lto_symtab_prevail_decl (tree prevailing inline tree lto_symtab_prevailing_decl (tree decl) { - if (DECL_ABSTRACT_ORIGIN (decl) == error_mark_node) + if (DECL_LANG_FLAG_0 (decl)) return DECL_CHAIN (decl); else {