http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60553

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
next_variant->type_name->type->next_variant->type-name->decl_original_type->type_name->decl_context->next_variant->type_context->next_variant->next_variant->next_variant->type_fields->type->...

it's walking a type hierarchy, up-and-down.  Ideally the GC walking would
be more structured here, but ...

Can you try if sth as simple as

Index: gcc/tree-core.h
===================================================================
--- gcc/tree-core.h     (revision 208615)
+++ gcc/tree-core.h     (working copy)
@@ -1265,11 +1265,11 @@ struct GTY(()) tree_type_common {
     const char * GTY ((tag ("TYPE_SYMTAB_IS_POINTER"))) pointer;
     struct die_struct * GTY ((tag ("TYPE_SYMTAB_IS_DIE"))) die;
   } GTY ((desc ("debug_hooks->tree_type_symtab_field"))) symtab;
-  tree name;
+  tree canonical;
   tree next_variant;
   tree main_variant;
   tree context;
-  tree canonical;
+  tree name;
 };

 struct GTY(()) tree_type_with_lang_specific {

helps?  That makes sure to first walk fields that point us downward the
type hierarchy and then those that point us upward?

With LTO it may be the case that TYPE_CANONICAL connects very many types
that are otherwise unrelated ...

Reply via email to