From: marxin Date: Fri, 12 Jan 2018 14:45:35 +0000 (+0000) Subject: Fix integer overflow in stats of trees. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a1e96c3c9faf2a8840428e37b1356eee95750901;p=thirdparty%2Fgcc.git Fix integer overflow in stats of trees. 2018-01-12 Martin Liska * tree-core.h: Use uint64_t instead of int. * tree.c (tree_node_counts): Likewise. (tree_node_sizes): Likewise. (dump_tree_statistics): Use PRIu64 in printf format. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256583 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 88417f738bac..730e8edd02b0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-01-12 Martin Liska + + * tree-core.h: Use uint64_t instead of int. + * tree.c (tree_node_counts): Likewise. + (tree_node_sizes): Likewise. + (dump_tree_statistics): Use PRIu64 in printf format. + 2018-01-12 Martin Liska * Makefile.in: As qsort_chk is implemented in vec.c, add diff --git a/gcc/tree-core.h b/gcc/tree-core.h index 56acd10a6535..478c631998cf 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -2123,8 +2123,8 @@ extern GTY(()) tree integer_types[itk_none]; extern GTY(()) tree sizetype_tab[(int) stk_type_kind_last]; /* Arrays for keeping track of tree node statistics. */ -extern int tree_node_counts[]; -extern int tree_node_sizes[]; +extern uint64_t tree_node_counts[]; +extern uint64_t tree_node_sizes[]; /* True if we are in gimple form and the actions of the folders need to be restricted. False if we are not in gimple form and folding is not diff --git a/gcc/tree.c b/gcc/tree.c index 722ce021b674..c008a55804c1 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -129,9 +129,9 @@ extern int _obstack_allocated_p (struct obstack *h, void *obj); /* Statistics-gathering stuff. */ -static int tree_code_counts[MAX_TREE_CODES]; -int tree_node_counts[(int) all_kinds]; -int tree_node_sizes[(int) all_kinds]; +static uint64_t tree_code_counts[MAX_TREE_CODES]; +uint64_t tree_node_counts[(int) all_kinds]; +uint64_t tree_node_sizes[(int) all_kinds]; /* Keep in sync with tree.h:enum tree_node_kind. */ static const char * const tree_node_kind_names[] = { @@ -9123,25 +9123,27 @@ dump_tree_statistics (void) if (GATHER_STATISTICS) { int i; - int total_nodes, total_bytes; + uint64_t total_nodes, total_bytes; fprintf (stderr, "\nKind Nodes Bytes\n"); mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); total_nodes = total_bytes = 0; for (i = 0; i < (int) all_kinds; i++) { - fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i], - tree_node_counts[i], tree_node_sizes[i]); + fprintf (stderr, "%-20s %7" PRIu64 " %10" PRIu64 "\n", + tree_node_kind_names[i], tree_node_counts[i], + tree_node_sizes[i]); total_nodes += tree_node_counts[i]; total_bytes += tree_node_sizes[i]; } mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); - fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes); + fprintf (stderr, "%-20s %7" PRIu64 " %10" PRIu64 "\n", "Total", + total_nodes, total_bytes); mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); fprintf (stderr, "Code Nodes\n"); mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); for (i = 0; i < (int) MAX_TREE_CODES; i++) - fprintf (stderr, "%-32s %7d\n", get_tree_code_name ((enum tree_code) i), - tree_code_counts[i]); + fprintf (stderr, "%-32s %7" PRIu64 "\n", + get_tree_code_name ((enum tree_code) i), tree_code_counts[i]); mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); fprintf (stderr, "\n"); ssanames_print_statistics ();