From ce2f49b3bf9fa7ca16ab1162b1ad231287e0067c Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Wed, 19 Mar 2014 15:37:28 +0000 Subject: [PATCH] re PR c++/60553 (segfault in gt_ggc_mx_lang_tree_node in Chromium with LTO) 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 | 6 ++++++ gcc/lto/ChangeLog | 6 ++++++ gcc/lto/lto-tree.h | 2 +- gcc/tree-core.h | 4 ++-- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ab789a42a14..23d60ec23c58 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 101fbfb7b259..ad806db7d761 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 d8d22333d41d..b1c3d2a848a2 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 e548a0dd37d1..a2dc387d647c 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 { -- GitLab