diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-04-29 20:17:00 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-04-29 20:17:00 +0000 |
commit | 60cde93696c3a8c25f85606b31645fb9c17af56b (patch) | |
tree | 7e942eaf69ef180aa8e849168fa65f672ed1d5d7 | |
parent | cc9d1c78ef92f6a29dc0bb4b4531504320267a20 (diff) | |
download | gcc-60cde93696c3a8c25f85606b31645fb9c17af56b.zip gcc-60cde93696c3a8c25f85606b31645fb9c17af56b.tar.gz gcc-60cde93696c3a8c25f85606b31645fb9c17af56b.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/error.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/new7.C | 7 |
4 files changed, 28 insertions, 3 deletions
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 <mark@codesourcery.com> + + PR c++/10527 + * error.c (dump_expr): Correctly handling of NEW_EXPR.4 + 2003-04-29 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> * 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 <mark@codesourcery.com> + PR c++/10527 + * g++.dg/init/new7.C: New test. + +2003-04-29 Mark Mitchell <mark@codesourcery.com> + * 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 <class T> + struct Foo + {}; + + template <class T> + void Foo<T>::NON_EXISTENT(int* val = new int()) {} // { dg-error "" } + |