From 1e3eacc7cb6d8d6471303df1148877379fe584cb Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 27 Oct 2007 17:55:34 +0200 Subject: [PATCH] re PR c++/33844 (Broken diagnostic: 'dotstar_expr/member_ref' not supported by pp_cxx_unqualified_id) PR c++/33844 * cxx-pretty-print.c (pp_cxx_pm_expression) : Print ->* rather than .*. * error.c (dump_expr): Handle MEMBER_REF and DOTSTAR_EXPR. * g++.dg/other/ptrmem8.C: New test. From-SVN: r129682 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/cxx-pretty-print.c | 5 ++++- gcc/cp/error.c | 5 +++++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/other/ptrmem8.C | 16 ++++++++++++++++ 5 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/other/ptrmem8.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index be18c36c78f..90a010f934e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2007-10-27 Jakub Jelinek + + PR c++/33844 + * cxx-pretty-print.c (pp_cxx_pm_expression) : Print + ->* rather than .*. + * error.c (dump_expr): Handle MEMBER_REF and DOTSTAR_EXPR. + 2007-10-27 Jason Merrill PR c++/5247 diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index 5cbf82cc859..1de5964dd73 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -814,7 +814,10 @@ pp_cxx_pm_expression (cxx_pretty_printer *pp, tree t) case MEMBER_REF: case DOTSTAR_EXPR: pp_cxx_pm_expression (pp, TREE_OPERAND (t, 0)); - pp_cxx_dot (pp); + if (TREE_CODE (t) == MEMBER_REF) + pp_cxx_arrow (pp); + else + pp_cxx_dot (pp); pp_star(pp); pp_cxx_cast_expression (pp, TREE_OPERAND (t, 1)); break; diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 5a54e8c9ada..5456c85c39b 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -2052,6 +2052,11 @@ dump_expr (tree t, int flags) pp_cxx_offsetof_expression (cxx_pp, t); break; + case MEMBER_REF: + case DOTSTAR_EXPR: + pp_multiplicative_expression (cxx_pp, t); + break; + case DELETE_EXPR: case VEC_DELETE_EXPR: pp_cxx_delete_expression (cxx_pp, t); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 837c35acdf9..0705dc14dc4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2007-10-27 Jakub Jelinek + PR c++/33844 + * g++.dg/other/ptrmem8.C: New test. + PR c++/33842 * g++.dg/template/error34.C: New test. diff --git a/gcc/testsuite/g++.dg/other/ptrmem8.C b/gcc/testsuite/g++.dg/other/ptrmem8.C new file mode 100644 index 00000000000..d0b0ba7228e --- /dev/null +++ b/gcc/testsuite/g++.dg/other/ptrmem8.C @@ -0,0 +1,16 @@ +// PR c++/33844 +// { dg-do compile } + +struct A {}; + +template void foo(void (A::* f)()) +{ + A a; + &(a.*f); // { dg-error "invalid use of\[^\n\]*\\.\\*\[^\n\]*to form|qualified-id is required" } +} + +template void bar(void (A::* f)()) +{ + A *p; + &(p->*f); // { dg-error "invalid use of\[^\n\]*->\\*\[^\n\]*to form|qualified-id is required" } +} -- 2.30.2