From c4a84e5d66462482bf8a918530dd80afa650ff1c Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Wed, 2 Jan 2008 23:52:17 +0000 Subject: [PATCH] Backport: 2007-10-31 Paolo Carlini PR c++/33494 * cxx-pretty-print.c (pp_cxx_typeid_expression, pp_cxx_delete_expression): Change to static linkage. * cxx-pretty-print.h: Adjust declarations. * error.c (dump_expr, case SCOPE_REF, TYPEID_EXPR, DELETE_EXPR, VEC_DELETE_EXPR, MODOP_EXPR): Forward to pp_expression. * cxx-pretty-print.c (pp_cxx_expression, case NON_DEPENDENT_EXPR): Fix typo. * g++.dg/template/error35.C: New. From-SVN: r131269 --- gcc/cp/ChangeLog | 12 ++++++++++++ gcc/cp/cxx-pretty-print.c | 7 ++++--- gcc/cp/cxx-pretty-print.h | 2 -- gcc/cp/error.c | 13 ++++--------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/error35.C | 3 +++ 6 files changed, 28 insertions(+), 14 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/error35.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 90982f42dc51..675aca54e272 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,18 @@ 2008-01-02 Volker Reichelt Backport: + 2007-10-31 Paolo Carlini + + PR c++/33494 + * cxx-pretty-print.c (pp_cxx_typeid_expression, + pp_cxx_delete_expression): Change to static linkage. + * cxx-pretty-print.h: Adjust declarations. + * error.c (dump_expr, case SCOPE_REF, TYPEID_EXPR, DELETE_EXPR, + VEC_DELETE_EXPR, MODOP_EXPR): Forward to pp_expression. + + * cxx-pretty-print.c (pp_cxx_expression, case NON_DEPENDENT_EXPR): + Fix typo. + 2007-11-02 Paolo Carlini PR c++/33495 diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index 4ad4d89960a5..68bc808ff263 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -43,6 +43,7 @@ static void pp_cxx_abstract_declarator (cxx_pretty_printer *, tree); static void pp_cxx_statement (cxx_pretty_printer *, tree); static void pp_cxx_template_parameter (cxx_pretty_printer *, tree); static void pp_cxx_cast_expression (cxx_pretty_printer *, tree); +static void pp_cxx_typeid_expression (cxx_pretty_printer *, tree); static inline void @@ -604,7 +605,7 @@ pp_cxx_new_expression (cxx_pretty_printer *pp, tree t) ::(opt) delete cast-expression ::(opt) delete [ ] cast-expression */ -void +static void pp_cxx_delete_expression (cxx_pretty_printer *pp, tree t) { enum tree_code code = TREE_CODE (t); @@ -976,7 +977,7 @@ pp_cxx_expression (cxx_pretty_printer *pp, tree t) case NON_DEPENDENT_EXPR: case MUST_NOT_THROW_EXPR: - pp_cxx_expression (pp, t); + pp_cxx_expression (pp, TREE_OPERAND (t, 0)); break; default: @@ -1971,7 +1972,7 @@ pp_cxx_declaration (cxx_pretty_printer *pp, tree t) } } -void +static void pp_cxx_typeid_expression (cxx_pretty_printer *pp, tree t) { t = TREE_OPERAND (t, 0); diff --git a/gcc/cp/cxx-pretty-print.h b/gcc/cp/cxx-pretty-print.h index 60dea036d349..c3aa302628fd 100644 --- a/gcc/cp/cxx-pretty-print.h +++ b/gcc/cp/cxx-pretty-print.h @@ -69,9 +69,7 @@ void pp_cxx_separate_with (cxx_pretty_printer *, int); 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 e495e430aed2..398d812cd116 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1768,10 +1768,6 @@ dump_expr (tree t, int flags) dump_decl (TEMPLATE_PARM_DECL (t), flags & ~TFF_DECL_SPECIFIERS); break; - case SCOPE_REF: - pp_expression (cxx_pp, t); - break; - case CAST_EXPR: if (TREE_OPERAND (t, 0) == NULL_TREE || TREE_CHAIN (TREE_OPERAND (t, 0))) @@ -1899,17 +1895,16 @@ dump_expr (tree t, int flags) dump_expr (TREE_OPERAND (t, 0), flags); break; - case TYPEID_EXPR: - pp_cxx_typeid_expression (cxx_pp, t); - break; - case VA_ARG_EXPR: pp_cxx_va_arg_expression (cxx_pp, t); break; + case SCOPE_REF: + case TYPEID_EXPR: case DELETE_EXPR: case VEC_DELETE_EXPR: - pp_cxx_delete_expression (cxx_pp, t); + case MODOP_EXPR: + pp_expression (cxx_pp, t); break; /* This list is incomplete, but should suffice for now. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8354a6ea3cac..83535b9103f1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2008-01-02 Volker Reichelt Backport: + 2007-10-31 Paolo Carlini + + PR c++/33494 + * g++.dg/template/error35.C: New. + 2007-11-02 Paolo Carlini PR c++/33495 diff --git a/gcc/testsuite/g++.dg/template/error35.C b/gcc/testsuite/g++.dg/template/error35.C new file mode 100644 index 000000000000..d52e599315e2 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/error35.C @@ -0,0 +1,3 @@ +// PR c++/33494 + +template void foo(int(*f=0)()); // { dg-error "declared void|scope|erroneous-expression" } -- 2.47.2