$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
     {

Reply via email to