diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-02-24 18:23:19 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-02-24 18:23:19 +0000 |
commit | b350f3fc730e5b65ee3db4205de5971e5d90253a (patch) | |
tree | f73f7f06b71fcec97609e731d4083690e184a7f8 /gcc/cp/cxx-pretty-print.c | |
parent | 1cfc1a6104bb642f3c06291b3596a5e19abe22b0 (diff) | |
download | gcc-b350f3fc730e5b65ee3db4205de5971e5d90253a.tar.gz |
2008-02-24 Paolo Carlini <pcarlini@suse.de>
* error.c (dump_expr): Don't deal directly with NEW_EXPR (and
VEC_NEW_EXPR), forward to pp_expression.
* cxx-pretty-print.c (pp_cxx_new_expression): Fix FIXME.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132595 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/cxx-pretty-print.c')
-rw-r--r-- | gcc/cp/cxx-pretty-print.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index 9c5a85ff0b4..62ff1fc3fc3 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -1,5 +1,5 @@ /* Implementation of subroutines for the GNU C++ pretty-printer. - Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net> This file is part of GCC. @@ -636,6 +636,8 @@ static void pp_cxx_new_expression (cxx_pretty_printer *pp, tree t) { enum tree_code code = TREE_CODE (t); + tree type = TREE_OPERAND (t, 1); + tree init = TREE_OPERAND (t, 2); switch (code) { case NEW_EXPR: @@ -648,18 +650,22 @@ pp_cxx_new_expression (cxx_pretty_printer *pp, tree t) pp_cxx_call_argument_list (pp, TREE_OPERAND (t, 0)); pp_space (pp); } - /* FIXME: array-types are built with one more element. */ - pp_cxx_type_id (pp, TREE_OPERAND (t, 1)); - if (TREE_OPERAND (t, 2)) + if (TREE_CODE (type) == ARRAY_REF) + type = build_cplus_array_type + (TREE_OPERAND (type, 0), + build_index_type (fold_build2 (MINUS_EXPR, integer_type_node, + TREE_OPERAND (type, 1), + integer_one_node))); + pp_cxx_type_id (pp, type); + if (init) { pp_left_paren (pp); - t = TREE_OPERAND (t, 2); - if (TREE_CODE (t) == TREE_LIST) - pp_c_expression_list (pp_c_base (pp), t); - else if (t == void_zero_node) + if (TREE_CODE (init) == TREE_LIST) + pp_c_expression_list (pp_c_base (pp), init); + else if (init == void_zero_node) ; /* OK, empty initializer list. */ else - pp_cxx_expression (pp, t); + pp_cxx_expression (pp, init); pp_right_paren (pp); } break; |