diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-04-04 15:07:27 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-04-04 15:07:27 +0200 |
commit | 05008a0c3c6826ee6bc4b5d0368c068af1509d58 (patch) | |
tree | f9bb3db532628c7015cc560987daa6670a8476ee /gcc/c-pretty-print.c | |
parent | 5f4bebbf4ef7c7b28f68e369ca1aa598132b3eba (diff) | |
download | gcc-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.c | 12 |
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)); |