aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-12-07 18:04:57 -0800
committerRichard Henderson <rth@gcc.gnu.org>2004-12-07 18:04:57 -0800
commitb16bcb178a4671d33cc6a8f82e93b93518230cf3 (patch)
treec6e4eb8f5b0aed4a5c5049a830e01d9dc4808f07 /gcc
parent74515a0a1a73fc58630c1b6116c80dc24638c102 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/tree-pretty-print.c74
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);
}
}