The C++ generates a broken diagnostic for the following invalid code snippet since GCC 3.4.0: ===================================== struct A {}; template<int> void foo(void (A::* f)()) { A a; &(a.*f); } ===================================== bug.cc: In function 'void foo(void (A::*)())': bug.cc:6: error: invalid use of '#'dotstar_expr' not supported by dump_expr#<expression error>' to form a pointer-to-member-function bug.cc:6: note: a qualified-id is required Same with pointers: ===================================== struct A {}; template<int> void foo(void (A::* f)()) { A *p; &(p->*f); } ===================================== bug.cc: In function 'void foo(void (A::*)())': bug.cc:6: error: invalid use of '#'member_ref' not supported by dump_expr#<expression error>' to form a pointer-to-member-function bug.cc:6: note: a qualified-id is required
Subject: Bug 33844 Author: jakub Date: Sat Oct 27 15:55:34 2007 New Revision: 129682 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=129682 Log: 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. Added: trunk/gcc/testsuite/g++.dg/other/ptrmem8.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/cxx-pretty-print.c trunk/gcc/cp/error.c trunk/gcc/testsuite/ChangeLog
Fixed on the trunk so far.
Closing 4.1 branch.
Closing 4.2 branch, fixed in 4.3.