From b16bcb178a4671d33cc6a8f82e93b93518230cf3 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 7 Dec 2004 18:04:57 -0800 Subject: [PATCH] tree-pretty-print.c (dump_array_domain): Split out from dump_generic_node; fix off-by-one error on zero-based array bounds. * tree-pretty-print.c (dump_array_domain): Split out from dump_generic_node; fix off-by-one error on zero-based array bounds. (dump_generic_node): Use it. (print_declaration): Likewise. From-SVN: r91850 --- gcc/ChangeLog | 7 ++++ gcc/tree-pretty-print.c | 74 ++++++++++++++++++----------------------- 2 files changed, 39 insertions(+), 42 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 10d9507fbbc..b74fcd8e516 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-12-07 Richard Henderson + + * tree-pretty-print.c (dump_array_domain): Split out from + dump_generic_node; fix off-by-one error on zero-based array bounds. + (dump_generic_node): Use it. + (print_declaration): Likewise. + 2004-12-08 Richard Guenther * doc/invoke.texi: Adjust default values for diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c index ce19f5fcf89..8f36235eb43 100644 --- a/gcc/tree-pretty-print.c +++ b/gcc/tree-pretty-print.c @@ -217,6 +217,35 @@ dump_function_declaration (pretty_printer *buffer, tree node, pp_character (buffer, ')'); } +/* Dump the domain associated with an array. */ + +static void +dump_array_domain (pretty_printer *buffer, tree domain, int spc, int flags) +{ + pp_character (buffer, '['); + if (domain) + { + tree min = TYPE_MIN_VALUE (domain); + tree max = TYPE_MAX_VALUE (domain); + + if (min && max + && integer_zerop (min) + && host_integerp (max, 0)) + pp_wide_integer (buffer, TREE_INT_CST_LOW (max) + 1); + else + { + if (min) + dump_generic_node (buffer, min, spc, flags, false); + pp_character (buffer, ':'); + if (max) + dump_generic_node (buffer, max, spc, flags, false); + } + } + else + pp_string (buffer, ""); + pp_character (buffer, ']'); +} + /* Dump the node NODE on the pretty_printer BUFFER, SPC spaces of indent. FLAGS specifies details to show in the dump (see TDF_* in tree.h). If IS_STMT is true, the object printed is considered to be a statement @@ -427,31 +456,8 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, dump_generic_node (buffer, tmp, spc, flags, false); /* Print the dimensions. */ - for (tmp = node; TREE_CODE (tmp) == ARRAY_TYPE; - tmp = TREE_TYPE (tmp)) - { - tree domain = TYPE_DOMAIN (tmp); - - pp_character (buffer, '['); - if (domain) - { - if (TYPE_MIN_VALUE (domain) - && !integer_zerop (TYPE_MIN_VALUE (domain))) - { - dump_generic_node (buffer, TYPE_MIN_VALUE (domain), - spc, flags, false); - pp_string (buffer, " .. "); - } - - if (TYPE_MAX_VALUE (domain)) - dump_generic_node (buffer, TYPE_MAX_VALUE (domain), - spc, flags, false); - } - else - pp_string (buffer, ""); - - pp_character (buffer, ']'); - } + for (tmp = node; TREE_CODE (tmp) == ARRAY_TYPE; tmp = TREE_TYPE (tmp)) + dump_array_domain (buffer, TYPE_DOMAIN (tmp), spc, flags); break; } @@ -1515,23 +1521,7 @@ print_declaration (pretty_printer *buffer, tree t, int spc, int flags) tmp = TREE_TYPE (t); while (TREE_CODE (tmp) == ARRAY_TYPE) { - pp_character (buffer, '['); - if (TYPE_DOMAIN (tmp)) - { - if (TYPE_MIN_VALUE (TYPE_DOMAIN (tmp)) - && !integer_zerop (TYPE_MIN_VALUE (TYPE_DOMAIN (tmp)))) - { - dump_generic_node (buffer, - TYPE_MIN_VALUE (TYPE_DOMAIN (tmp)), - spc, flags, false); - pp_string (buffer, " .. "); - } - - if (TYPE_MAX_VALUE (TYPE_DOMAIN (tmp))) - dump_generic_node (buffer, TYPE_MAX_VALUE (TYPE_DOMAIN (tmp)), - spc, flags, false); - } - pp_character (buffer, ']'); + dump_array_domain (buffer, TYPE_DOMAIN (tmp), spc, flags); tmp = TREE_TYPE (tmp); } }