From 60cde93696c3a8c25f85606b31645fb9c17af56b Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Tue, 29 Apr 2003 20:17:00 +0000 Subject: 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 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/error.c | 12 ++++++++++-- gcc/testsuite/ChangeLog | 7 ++++++- gcc/testsuite/g++.dg/init/new7.C | 7 +++++++ 4 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/init/new7.C (limited to 'gcc') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 98d9fdb..3a65705 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 f836ecc..3e299de 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 45326b2..0a670f8 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 0000000..e07d226 --- /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 "" } + -- cgit v1.1