aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-pretty-print.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-04-04 15:07:27 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2008-04-04 15:07:27 +0200
commit05008a0c3c6826ee6bc4b5d0368c068af1509d58 (patch)
treef9bb3db532628c7015cc560987daa6670a8476ee /gcc/c-pretty-print.c
parent5f4bebbf4ef7c7b28f68e369ca1aa598132b3eba (diff)
downloadgcc-05008a0c3c6826ee6bc4b5d0368c068af1509d58.zip
gcc-05008a0c3c6826ee6bc4b5d0368c068af1509d58.tar.gz
gcc-05008a0c3c6826ee6bc4b5d0368c068af1509d58.tar.bz2
re PR c/35440 (ICE resulting in completely broken diagnostic)
PR c/35440 * c-pretty-print.c (pp_c_initializer_list): Handle CONSTRUCTOR for all types. * gcc.dg/pr35440.c: New test. From-SVN: r133897
Diffstat (limited to 'gcc/c-pretty-print.c')
-rw-r--r--gcc/c-pretty-print.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c
index c8443d3..39044a3 100644
--- a/gcc/c-pretty-print.c
+++ b/gcc/c-pretty-print.c
@@ -1173,6 +1173,12 @@ pp_c_initializer_list (c_pretty_printer *pp, tree e)
tree type = TREE_TYPE (e);
const enum tree_code code = TREE_CODE (type);
+ if (TREE_CODE (e) == CONSTRUCTOR)
+ {
+ pp_c_constructor_elts (pp, CONSTRUCTOR_ELTS (e));
+ return;
+ }
+
switch (code)
{
case RECORD_TYPE:
@@ -1207,16 +1213,12 @@ pp_c_initializer_list (c_pretty_printer *pp, tree e)
case VECTOR_TYPE:
if (TREE_CODE (e) == VECTOR_CST)
pp_c_expression_list (pp, TREE_VECTOR_CST_ELTS (e));
- else if (TREE_CODE (e) == CONSTRUCTOR)
- pp_c_constructor_elts (pp, CONSTRUCTOR_ELTS (e));
else
break;
return;
case COMPLEX_TYPE:
- if (TREE_CODE (e) == CONSTRUCTOR)
- pp_c_constructor_elts (pp, CONSTRUCTOR_ELTS (e));
- else if (TREE_CODE (e) == COMPLEX_CST || TREE_CODE (e) == COMPLEX_EXPR)
+ if (TREE_CODE (e) == COMPLEX_CST || TREE_CODE (e) == COMPLEX_EXPR)
{
const bool cst = TREE_CODE (e) == COMPLEX_CST;
pp_expression (pp, cst ? TREE_REALPART (e) : TREE_OPERAND (e, 0));