From f1f259dbd2f0da020b404c53e1e8a2e53af4eb3b Mon Sep 17 00:00:00 2001 From: marxin Date: Thu, 24 Nov 2016 09:42:18 +0000 Subject: [PATCH] Fix print_node for CONSTRUCTORs * print-tree.c (struct bucket): Remove. (print_node): Add new argument which drives whether a tree node is printed briefly or not. (debug_tree): Replace a custom hash table with hash_set. * print-tree.h (print_node): Add the argument. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@242820 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/print-tree.c | 43 +++++++++++++++---------------------------- gcc/print-tree.h | 3 ++- 3 files changed, 25 insertions(+), 29 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index de39daf8a10d..b1503626b47c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2016-11-24 Martin Liska + + * print-tree.c (struct bucket): Remove. + (print_node): Add new argument which drives whether a tree node + is printed briefly or not. + (debug_tree): Replace a custom hash table with hash_set. + * print-tree.h (print_node): Add the argument. + 2016-11-24 Chung-Lin Tang * config/nios2/nios2.c (nios2_init_libfuncs): Add ATTRIBUTE_UNUSED. diff --git a/gcc/print-tree.c b/gcc/print-tree.c index 8c63cb8ee23b..f3ee04cbbb27 100644 --- a/gcc/print-tree.c +++ b/gcc/print-tree.c @@ -33,19 +33,14 @@ along with GCC; see the file COPYING3. If not see #include "gimple-pretty-print.h" /* FIXME */ #include "tree-cfg.h" #include "tree-dump.h" +#include "print-tree.h" /* Define the hash table of nodes already seen. Such nodes are not repeated; brief cross-references are used. */ #define HASH_SIZE 37 -struct bucket -{ - tree node; - struct bucket *next; -}; - -static struct bucket **table; +static hash_set *table = NULL; /* Print PREFIX and ADDR to FILE. */ void @@ -176,10 +171,9 @@ indent_to (FILE *file, int column) starting in column INDENT. */ void -print_node (FILE *file, const char *prefix, tree node, int indent) +print_node (FILE *file, const char *prefix, tree node, int indent, + bool brief_for_visited) { - int hash; - struct bucket *b; machine_mode mode; enum tree_code_class tclass; int len; @@ -219,21 +213,14 @@ print_node (FILE *file, const char *prefix, tree node, int indent) /* Allow this function to be called if the table is not there. */ if (table) { - hash = ((uintptr_t) node) % HASH_SIZE; - /* If node is in the table, just mention its address. */ - for (b = table[hash]; b; b = b->next) - if (b->node == node) - { - print_node_brief (file, prefix, node, indent); - return; - } + if (table->contains (node) && brief_for_visited) + { + print_node_brief (file, prefix, node, indent); + return; + } - /* Add this node to the table. */ - b = XNEW (struct bucket); - b->node = node; - b->next = table[hash]; - table[hash] = b; + table->add (node); } /* Indent to the specified column, since this is the long form. */ @@ -846,8 +833,8 @@ print_node (FILE *file, const char *prefix, tree node, int indent) FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (node), cnt, index, value) { - print_node (file, "idx", index, indent + 4); - print_node (file, "val", value, indent + 4); + print_node (file, "idx", index, indent + 4, false); + print_node (file, "val", value, indent + 4, false); } } break; @@ -997,10 +984,10 @@ print_node (FILE *file, const char *prefix, tree node, int indent) DEBUG_FUNCTION void debug_tree (tree node) { - table = XCNEWVEC (struct bucket *, HASH_SIZE); + table = new hash_set (HASH_SIZE); print_node (stderr, "", node, 0); - free (table); - table = 0; + delete table; + table = NULL; putc ('\n', stderr); } diff --git a/gcc/print-tree.h b/gcc/print-tree.h index 124deab42167..fd610f912ede 100644 --- a/gcc/print-tree.h +++ b/gcc/print-tree.h @@ -38,7 +38,8 @@ extern void debug_raw (vec &ref); extern void debug_raw (vec *ptr); #ifdef BUFSIZ extern void dump_addr (FILE*, const char *, const void *); -extern void print_node (FILE *, const char *, tree, int); +extern void print_node (FILE *, const char *, tree, int, + bool brief_for_visited = true); extern void print_node_brief (FILE *, const char *, const_tree, int); extern void indent_to (FILE *, int); #endif -- 2.11.4.GIT