From ea8198876cd3aa429bee873dec36394dc412c43e Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Wed, 2 Jan 2008 23:47:08 +0000 Subject: [PATCH] Backport: 2007-09-27 Paolo Carlini PR c++/33493 * error.c (dump_expr): Deal with DELETE_EXPR and VEC_DELETE_EXPR. * cxx-pretty-print.c (pp_cxx_delete_expression): Add missing spaces in the formatting. * cxx-pretty-print.h (pp_cxx_delete_expression): Declare. * g++.dg/template/error31.C: New. From-SVN: r131267 --- gcc/cp/ChangeLog | 8 ++++++++ gcc/cp/cxx-pretty-print.c | 7 +++++-- gcc/cp/cxx-pretty-print.h | 1 + gcc/cp/error.c | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/error31.C | 3 +++ 6 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/error31.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a794d8ab45fe..9d3332764227 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,14 @@ 2008-01-02 Volker Reichelt Backport: + 2007-09-27 Paolo Carlini + + PR c++/33493 + * error.c (dump_expr): Deal with DELETE_EXPR and VEC_DELETE_EXPR. + * cxx-pretty-print.c (pp_cxx_delete_expression): Add missing + spaces in the formatting. + * cxx-pretty-print.h (pp_cxx_delete_expression): Declare. + 2007-09-18 Paolo Carlini PR c++/33462 diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index 5dfd7af3f926..4ad4d89960a5 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -604,7 +604,7 @@ pp_cxx_new_expression (cxx_pretty_printer *pp, tree t) ::(opt) delete cast-expression ::(opt) delete [ ] cast-expression */ -static void +void pp_cxx_delete_expression (cxx_pretty_printer *pp, tree t) { enum tree_code code = TREE_CODE (t); @@ -615,10 +615,13 @@ pp_cxx_delete_expression (cxx_pretty_printer *pp, tree t) if (DELETE_EXPR_USE_GLOBAL (t)) pp_cxx_colon_colon (pp); pp_cxx_identifier (pp, "delete"); - if (code == VEC_DELETE_EXPR) + pp_space (pp); + if (code == VEC_DELETE_EXPR + || DELETE_EXPR_USE_VEC (t)) { pp_left_bracket (pp); pp_right_bracket (pp); + pp_space (pp); } pp_c_cast_expression (pp_c_base (pp), TREE_OPERAND (t, 0)); break; diff --git a/gcc/cp/cxx-pretty-print.h b/gcc/cp/cxx-pretty-print.h index 4375936cf4af..60dea036d349 100644 --- a/gcc/cp/cxx-pretty-print.h +++ b/gcc/cp/cxx-pretty-print.h @@ -71,6 +71,7 @@ void pp_cxx_declaration (cxx_pretty_printer *, tree); void pp_cxx_canonical_template_parameter (cxx_pretty_printer *, tree); void pp_cxx_typeid_expression (cxx_pretty_printer *, tree); void pp_cxx_va_arg_expression (cxx_pretty_printer *, tree); +void pp_cxx_delete_expression (cxx_pretty_printer *, tree); #endif /* GCC_CXX_PRETTY_PRINT_H */ diff --git a/gcc/cp/error.c b/gcc/cp/error.c index c62af6553cd6..8b8fabb87194 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1901,6 +1901,11 @@ dump_expr (tree t, int flags) pp_cxx_va_arg_expression (cxx_pp, t); break; + case DELETE_EXPR: + case VEC_DELETE_EXPR: + pp_cxx_delete_expression (cxx_pp, t); + break; + /* This list is incomplete, but should suffice for now. It is very important that `sorry' does not call `report_error_function'. That could cause an infinite loop. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 181938fed90e..41c7159bedff 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2008-01-02 Volker Reichelt Backport: + 2007-09-27 Paolo Carlini + + PR c++/33493 + * g++.dg/template/error31.C: New. + 2007-09-18 Paolo Carlini PR c++/33462 diff --git a/gcc/testsuite/g++.dg/template/error31.C b/gcc/testsuite/g++.dg/template/error31.C new file mode 100644 index 000000000000..4fd70262389a --- /dev/null +++ b/gcc/testsuite/g++.dg/template/error31.C @@ -0,0 +1,3 @@ +// PR c++/33493 + +template void foo() { delete 0 ? 1 : 0; } // { dg-error "delete 0" } -- 2.47.2