diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3ab789a42a144b4462e10ef9cec2774cd3bd8bff..23d60ec23c5808505b723122fbd9efd04f64c185 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2014-03-19  Richard Biener  <rguenther@suse.de>
+
+	PR middle-end/60553
+	* tree-core.h (tree_type_common): Re-order pointer members
+	to reduce recursion depth during GC walks.
+
 2014-03-19  Marek Polacek  <polacek@redhat.com>
 
 	PR sanitizer/60569
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 101fbfb7b2598defa41eb2f80039c40af360f5ba..ad806db7d76184ab108c7b91eb20d4d2de7c0f48 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,9 @@
+2014-03-19  Richard Biener  <rguenther@suse.de>
+
+	PR middle-end/60553
+	* lto-tree.h (lang_tree_node): For types use TYPE_NEXT_VARIANT 
+	instead of TREE_CHAIN as chain_next.
+
 2014-03-19  Richard Biener  <rguenther@suse.de>
 
 	* lto.c (lto_wpa_write_files): Move call to
diff --git a/gcc/lto/lto-tree.h b/gcc/lto/lto-tree.h
index d8d22333d41d638a4b118cc4f5ddd0394a00012e..b1c3d2a848a2d8d5c54f7d60340c7e794882ffa2 100644
--- a/gcc/lto/lto-tree.h
+++ b/gcc/lto/lto-tree.h
@@ -48,7 +48,7 @@ enum lto_tree_node_structure_enum {
 };
 
 union GTY((desc ("lto_tree_node_structure (&%h)"),
-	  chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")))
+	  chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_TYPE_COMMON) ? ((union lang_tree_node *) %h.generic.type_common.next_variant) : CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) %h.generic.common.chain) : NULL")))
     lang_tree_node
 {
   union tree_node GTY ((tag ("TS_LTO_GENERIC"),
diff --git a/gcc/tree-core.h b/gcc/tree-core.h
index e548a0dd37d167a1663c90b6de3f85bd80f2f77e..a2dc387d647c6e9bdcda13313186b6bdb9573c2c 100644
--- a/gcc/tree-core.h
+++ b/gcc/tree-core.h
@@ -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 {