diff options
author | Richard Henderson <rth@redhat.com> | 2004-12-07 18:04:57 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-12-07 18:04:57 -0800 |
commit | b16bcb178a4671d33cc6a8f82e93b93518230cf3 (patch) | |
tree | c6e4eb8f5b0aed4a5c5049a830e01d9dc4808f07 /gcc | |
parent | 74515a0a1a73fc58630c1b6116c80dc24638c102 (diff) | |
download | gcc-b16bcb178a4671d33cc6a8f82e93b93518230cf3.zip gcc-b16bcb178a4671d33cc6a8f82e93b93518230cf3.tar.gz gcc-b16bcb178a4671d33cc6a8f82e93b93518230cf3.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-pretty-print.c | 74 |
2 files changed, 39 insertions, 42 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 10d9507..b74fcd8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-12-07 Richard Henderson <rth@redhat.com> + + * 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 <richard.guenther@uni-tuebingen.de> * doc/invoke.texi: Adjust default values for diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c index ce19f5f..8f36235 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, "<unknown>"); + 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, "<unknown>"); - - 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); } } |