tree-pretty-print.c (dump_generic_code): Print [idx]= and [idx1 ...

* tree-pretty-print.c (dump_generic_code) <case CONSTRUCTOR>: Print
	[idx]= and [idx1 ... idx2]= before initializers if needed for
	array initializers.

From-SVN: r175748
This commit is contained in:
Jakub Jelinek 2011-07-01 10:21:09 +02:00 committed by Jakub Jelinek
parent 7474f71976
commit 3aecd443da
2 changed files with 53 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2011-07-01 Jakub Jelinek <jakub@redhat.com>
* tree-pretty-print.c (dump_generic_code) <case CONSTRUCTOR>: Print
[idx]= and [idx1 ... idx2]= before initializers if needed for
array initializers.
2011-07-01 Chen Liqin <liqin.gcc@gmail.com>
* config.gcc (score-*-elf): Remove score7.o.

View File

@ -1,6 +1,6 @@
/* Pretty formatting of GENERIC trees in C syntax.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
2011 Free Software Foundation, Inc.
Adapted from c-pretty-print.c by Diego Novillo <dnovillo@redhat.com>
This file is part of GCC.
@ -1250,19 +1250,58 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
{
unsigned HOST_WIDE_INT ix;
tree field, val;
bool is_struct_init = FALSE;
bool is_struct_init = false;
bool is_array_init = false;
double_int curidx = double_int_zero;
pp_character (buffer, '{');
if (TREE_CODE (TREE_TYPE (node)) == RECORD_TYPE
|| TREE_CODE (TREE_TYPE (node)) == UNION_TYPE)
is_struct_init = TRUE;
is_struct_init = true;
else if (TREE_CODE (TREE_TYPE (node)) == ARRAY_TYPE
&& TYPE_DOMAIN (TREE_TYPE (node))
&& TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node)))
&& TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node))))
== INTEGER_CST)
{
tree minv = TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (node)));
is_array_init = true;
curidx = tree_to_double_int (minv);
}
FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (node), ix, field, val)
{
if (field && is_struct_init)
if (field)
{
pp_character (buffer, '.');
dump_generic_node (buffer, field, spc, flags, false);
pp_string (buffer, "=");
if (is_struct_init)
{
pp_character (buffer, '.');
dump_generic_node (buffer, field, spc, flags, false);
pp_character (buffer, '=');
}
else if (is_array_init
&& (TREE_CODE (field) != INTEGER_CST
|| !double_int_equal_p (tree_to_double_int (field),
curidx)))
{
pp_character (buffer, '[');
if (TREE_CODE (field) == RANGE_EXPR)
{
dump_generic_node (buffer, TREE_OPERAND (field, 0), spc,
flags, false);
pp_string (buffer, " ... ");
dump_generic_node (buffer, TREE_OPERAND (field, 1), spc,
flags, false);
if (TREE_CODE (TREE_OPERAND (field, 1)) == INTEGER_CST)
curidx = tree_to_double_int (TREE_OPERAND (field, 1));
}
else
dump_generic_node (buffer, field, spc, flags, false);
if (TREE_CODE (field) == INTEGER_CST)
curidx = tree_to_double_int (field);
pp_string (buffer, "]=");
}
}
if (is_array_init)
curidx = double_int_add (curidx, double_int_one);
if (val && TREE_CODE (val) == ADDR_EXPR)
if (TREE_CODE (TREE_OPERAND (val, 0)) == FUNCTION_DECL)
val = TREE_OPERAND (val, 0);