diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/gdbhooks.py | 3 | ||||
-rw-r--r-- | gcc/print-tree.c | 16 | ||||
-rw-r--r-- | gcc/tree.c | 6 |
4 files changed, 24 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 66e4539..f115982 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-06-11 Jason Merrill <jason@redhat.com> + + * gdbhooks.py (TreePrinter.to_string): Recognize ggc_free'd memory. + * tree.c (get_tree_code_name): Likewise. + * print-tree.c (print_node): Only briefly print a node with an + invalid code. + 2019-06-11 Jakub Jelinek <jakub@redhat.com> PR bootstrap/90819 diff --git a/gcc/gdbhooks.py b/gcc/gdbhooks.py index 39f5c47..e08208e 100644 --- a/gcc/gdbhooks.py +++ b/gcc/gdbhooks.py @@ -222,6 +222,9 @@ class TreePrinter: # extern const enum tree_code_class tree_code_type[]; # #define TREE_CODE_CLASS(CODE) tree_code_type[(int) (CODE)] + if val_TREE_CODE == 0xa5a5: + return '<ggc_freed 0x%x>' % intptr(self.gdbval) + val_tree_code_type = gdb.parse_and_eval('tree_code_type') val_tclass = val_tree_code_type[val_TREE_CODE] diff --git a/gcc/print-tree.c b/gcc/print-tree.c index 81b66a1..f69a2c2 100644 --- a/gcc/print-tree.c +++ b/gcc/print-tree.c @@ -233,6 +233,15 @@ print_node (FILE *file, const char *prefix, tree node, int indent, return; code = TREE_CODE (node); + + /* It is unsafe to look at any other fields of a node with ERROR_MARK or + invalid code. */ + if (code == ERROR_MARK || code >= MAX_TREE_CODES) + { + print_node_brief (file, prefix, node, indent); + return; + } + tclass = TREE_CODE_CLASS (code); /* Don't get too deep in nesting. If the user wants to see deeper, @@ -251,13 +260,6 @@ print_node (FILE *file, const char *prefix, tree node, int indent, return; } - /* It is unsafe to look at any other fields of an ERROR_MARK node. */ - if (code == ERROR_MARK) - { - print_node_brief (file, prefix, node, indent); - return; - } - /* Allow this function to be called if the table is not there. */ if (table) { @@ -13450,7 +13450,11 @@ get_tree_code_name (enum tree_code code) const char *invalid = "<invalid tree code>"; if (code >= MAX_TREE_CODES) - return invalid; + { + if (code == 0xa5a5) + return "ggc_freed"; + return invalid; + } return tree_code_name[code]; } |