aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2008-02-24 18:23:19 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2008-02-24 18:23:19 +0000
commita84a98ca46a9c49970f69f36432fc5c31dc5e807 (patch)
treef73f7f06b71fcec97609e731d4083690e184a7f8
parent98d778a6631e548dbee67cf8e2445230300a3c4e (diff)
downloadgcc-a84a98ca46a9c49970f69f36432fc5c31dc5e807.zip
gcc-a84a98ca46a9c49970f69f36432fc5c31dc5e807.tar.gz
gcc-a84a98ca46a9c49970f69f36432fc5c31dc5e807.tar.bz2
error.c (dump_expr): Don't deal directly with NEW_EXPR (and VEC_NEW_EXPR), forward to pp_expression.
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. From-SVN: r132595
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/cxx-pretty-print.c24
-rw-r--r--gcc/cp/error.c39
3 files changed, 23 insertions, 46 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 68f9a7b..d4d726c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+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.
+
2008-02-24 Danny Smith <dannysmith@users.sourceforge.net>
PR c++/34749
diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c
index 9c5a85f..62ff1fc 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;
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index b81120a..678fd9d 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -1583,43 +1583,6 @@ dump_expr (tree t, int flags)
}
break;
- case NEW_EXPR:
- {
- tree type = TREE_OPERAND (t, 1);
- tree init = TREE_OPERAND (t, 2);
- if (NEW_EXPR_USE_GLOBAL (t))
- pp_cxx_colon_colon (cxx_pp);
- pp_cxx_identifier (cxx_pp, "new");
- if (TREE_OPERAND (t, 0))
- {
- pp_cxx_left_paren (cxx_pp);
- dump_expr_list (TREE_OPERAND (t, 0), flags);
- pp_cxx_right_paren (cxx_pp);
- pp_cxx_whitespace (cxx_pp);
- }
- 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)));
- dump_type (type, flags);
- if (init)
- {
- pp_cxx_left_paren (cxx_pp);
- if (TREE_CODE (init) == TREE_LIST)
- dump_expr_list (init, flags);
- else if (init == void_zero_node)
- /* This representation indicates an empty initializer,
- e.g.: "new int()". */
- ;
- else
- dump_expr (init, flags);
- pp_cxx_right_paren (cxx_pp);
- }
- }
- break;
-
case TARGET_EXPR:
/* Note that this only works for G++ target exprs. If somebody
builds a general TARGET_EXPR, there's no way to represent that
@@ -2075,6 +2038,8 @@ dump_expr (tree t, int flags)
case TYPEID_EXPR:
case MEMBER_REF:
case DOTSTAR_EXPR:
+ case NEW_EXPR:
+ case VEC_NEW_EXPR:
case DELETE_EXPR:
case VEC_DELETE_EXPR:
case MODOP_EXPR: