aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2014-03-19 15:37:28 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2014-03-19 15:37:28 +0000
commitce2f49b3bf9fa7ca16ab1162b1ad231287e0067c (patch)
tree25b1b4334fb97dc4d62b7fd5d23aa33c8040ce71
parent6daa2d914b638ea400bc42a3e29a6d1cdf602ea1 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/lto/ChangeLog6
-rw-r--r--gcc/lto/lto-tree.h2
-rw-r--r--gcc/tree-core.h4
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 {