diff options
author | Richard Biener <rguenther@suse.de> | 2014-03-19 15:37:28 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-03-19 15:37:28 +0000 |
commit | ce2f49b3bf9fa7ca16ab1162b1ad231287e0067c (patch) | |
tree | 25b1b4334fb97dc4d62b7fd5d23aa33c8040ce71 | |
parent | 6daa2d914b638ea400bc42a3e29a6d1cdf602ea1 (diff) | |
download | gcc-ce2f49b3bf9fa7ca16ab1162b1ad231287e0067c.zip gcc-ce2f49b3bf9fa7ca16ab1162b1ad231287e0067c.tar.gz gcc-ce2f49b3bf9fa7ca16ab1162b1ad231287e0067c.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto/lto-tree.h | 2 | ||||
-rw-r--r-- | gcc/tree-core.h | 4 |
4 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ab789a..23d60ec 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 101fbfb..ad806db 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,5 +1,11 @@ 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 lto_promote_cross_file_statics ... (do_whole_program_analysis): ... here, into the partitioning diff --git a/gcc/lto/lto-tree.h b/gcc/lto/lto-tree.h index d8d2233..b1c3d2a 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 e548a0d..a2dc387 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 { |