From: Mark Mitchell Date: Tue, 29 Apr 2003 20:17:00 +0000 (+0000) Subject: re PR c++/10527 (confused error message with "new int()" parameter initializer) X-Git-Tag: releases/gcc-3.4.0~6955 X-Git-Url: https://gcc.gnu.org/git/?a=commitdiff_plain;h=60cde93696c3a8c25f85606b31645fb9c17af56b;p=gcc.git re PR c++/10527 (confused error message with "new int()" parameter initializer) PR c++/10527 * error.c (dump_expr): Correctly handling of NEW_EXPR.4 PR c++/10527 * g++.dg/init/new7.C: New test. From-SVN: r66247 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 98d9fdbdc67e..3a65705a2898 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2003-04-29 Mark Mitchell + + PR c++/10527 + * error.c (dump_expr): Correctly handling of NEW_EXPR.4 + 2003-04-29 Kriang Lerdsuwanakij * call.c (build_operator_new_call): Fix typo. diff --git a/gcc/cp/error.c b/gcc/cp/error.c index f836ecc59ec1..3e299de57c86 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1603,6 +1603,7 @@ dump_expr (tree t, int flags) case NEW_EXPR: { tree type = TREE_OPERAND (t, 1); + tree init = TREE_OPERAND (t, 2); if (NEW_EXPR_USE_GLOBAL (t)) print_scope_operator (scratch_buffer); output_add_string (scratch_buffer, "new "); @@ -1619,10 +1620,17 @@ dump_expr (tree t, int flags) TREE_OPERAND (type, 1), integer_one_node)))); dump_type (type, flags); - if (TREE_OPERAND (t, 2)) + if (init) { print_left_paren (scratch_buffer); - dump_expr_list (TREE_OPERAND (t, 2), flags); + 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); print_right_paren (scratch_buffer); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 45326b207d38..0a670f8797a4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,7 +1,12 @@ +2003-04-29 Mark Mitchell + + PR c++/10527 + * g++.dg/init/new7.C: New test. + 2003-04-29 Mark Mitchell * g++.dg/ext/desig1.C: New test. - * g++.dg/ext/init1.C: Likewise. + * g++.dg/ext/init1.C: Update. * g++.old-deja/g++.pt/deduct5.C: Remove unnecessary initializer. diff --git a/gcc/testsuite/g++.dg/init/new7.C b/gcc/testsuite/g++.dg/init/new7.C new file mode 100644 index 000000000000..e07d2261738c --- /dev/null +++ b/gcc/testsuite/g++.dg/init/new7.C @@ -0,0 +1,7 @@ +template + struct Foo + {}; + + template + void Foo::NON_EXISTENT(int* val = new int()) {} // { dg-error "" } +