The following patch avoids issues with TYPE_STUB_DECL.

LTO bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2011-12-14  Richard Guenther  <rguent...@suse.de>

        * tree.c (free_lang_data_in_type): Do not clear fields
        dependent on debuginfo level setting.
        (find_decls_types_r): Use TYPE_STUB_DECL rathern than TREE_CHAIN.
        * tree.h (TYPE_STUB_DECL): Properly check that we access
        a type.

Index: gcc/tree.c
===================================================================
--- gcc/tree.c  (revision 182326)
+++ gcc/tree.c  (working copy)
@@ -4521,9 +4521,6 @@ free_lang_data_in_type (tree type)
          && TREE_CODE (TYPE_CONTEXT (type)) != FUNCTION_DECL
          && TREE_CODE (TYPE_CONTEXT (type)) != NAMESPACE_DECL))
     TYPE_CONTEXT (type) = NULL_TREE;
-
-  if (debug_info_level < DINFO_LEVEL_TERSE)
-    TYPE_STUB_DECL (type) = NULL_TREE;
 }
 
 
@@ -4881,7 +4878,7 @@ find_decls_types_r (tree *tp, int *ws, v
            }
        }
 
-      fld_worklist_push (TREE_CHAIN (t), fld);
+      fld_worklist_push (TYPE_STUB_DECL (t), fld);
       *ws = 0;
     }
   else if (TREE_CODE (t) == BLOCK)
Index: gcc/tree.h
===================================================================
--- gcc/tree.h  (revision 182326)
+++ gcc/tree.h  (working copy)
@@ -2247,7 +2247,7 @@ extern enum machine_mode vector_type_mod
    to point back at the TYPE_DECL node.  This allows the debug routines
    to know that the two nodes represent the same type, so that we only
    get one debug info record for them.  */
-#define TYPE_STUB_DECL(NODE) TREE_CHAIN (NODE)
+#define TYPE_STUB_DECL(NODE) (TREE_CHAIN (TYPE_CHECK (NODE)))
 
 /* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type
    has BLKmode only because it lacks the alignment requirement for

Reply via email to