]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/60553 (segfault in gt_ggc_mx_lang_tree_node in Chromium with LTO)
authorRichard Biener <rguenther@suse.de>
Wed, 19 Mar 2014 15:37:28 +0000 (15:37 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 19 Mar 2014 15:37:28 +0000 (15:37 +0000)
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.

lto/
* lto-tree.h (lang_tree_node): For types use TYPE_NEXT_VARIANT
instead of TREE_CHAIN as chain_next.

From-SVN: r208682

gcc/ChangeLog
gcc/lto/ChangeLog
gcc/lto/lto-tree.h
gcc/tree-core.h

index 3ab789a42a144b4462e10ef9cec2774cd3bd8bff..23d60ec23c5808505b723122fbd9efd04f64c185 100644 (file)
@@ -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
index 101fbfb7b2598defa41eb2f80039c40af360f5ba..ad806db7d76184ab108c7b91eb20d4d2de7c0f48 100644 (file)
@@ -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
index d8d22333d41d638a4b118cc4f5ddd0394a00012e..b1c3d2a848a2d8d5c54f7d60340c7e794882ffa2 100644 (file)
@@ -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"),
index e548a0dd37d167a1663c90b6de3f85bd80f2f77e..a2dc387d647c6e9bdcda13313186b6bdb9573c2c 100644 (file)
@@ -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 {