diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-10-27 17:55:34 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2007-10-27 17:55:34 +0200 |
commit | 1e3eacc7cb6d8d6471303df1148877379fe584cb (patch) | |
tree | e20644e65214c9faa7091e3e93e044f503db04da /gcc | |
parent | d02dbde6c7e32fb62ea6ee372b0b9748ff9d39b9 (diff) | |
download | gcc-1e3eacc7cb6d8d6471303df1148877379fe584cb.zip gcc-1e3eacc7cb6d8d6471303df1148877379fe584cb.tar.gz gcc-1e3eacc7cb6d8d6471303df1148877379fe584cb.tar.bz2 |
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) <case MEMBER_REF>: Print
->* rather than .*.
* error.c (dump_expr): Handle MEMBER_REF and DOTSTAR_EXPR.
* g++.dg/other/ptrmem8.C: New test.
From-SVN: r129682
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/cxx-pretty-print.c | 5 | ||||
-rw-r--r-- | gcc/cp/error.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/ptrmem8.C | 16 |
5 files changed, 35 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index be18c36..90a010f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2007-10-27 Jakub Jelinek <jakub@redhat.com> + + PR c++/33844 + * cxx-pretty-print.c (pp_cxx_pm_expression) <case MEMBER_REF>: Print + ->* rather than .*. + * error.c (dump_expr): Handle MEMBER_REF and DOTSTAR_EXPR. + 2007-10-27 Jason Merrill <jason@redhat.com> PR c++/5247 diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index 5cbf82c..1de5964 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 5a54e8c..5456c85 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 837c35a..0705dc14 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2007-10-27 Jakub Jelinek <jakub@redhat.com> + 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 0000000..d0b0ba7 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/ptrmem8.C @@ -0,0 +1,16 @@ +// PR c++/33844 +// { dg-do compile } + +struct A {}; + +template<int> void foo(void (A::* f)()) +{ + A a; + &(a.*f); // { dg-error "invalid use of\[^\n\]*\\.\\*\[^\n\]*to form|qualified-id is required" } +} + +template<int> void bar(void (A::* f)()) +{ + A *p; + &(p->*f); // { dg-error "invalid use of\[^\n\]*->\\*\[^\n\]*to form|qualified-id is required" } +} |