From 04cbc981018aac9f093d46ef876aa808fcbf036d Mon Sep 17 00:00:00 2001 From: Gabriel Dos Reis Date: Fri, 1 Nov 2002 13:12:24 +0000 Subject: [PATCH] re PR c++/2521 (ICE in build_ptrmemfunc, at cp/typeck.c:6087) PR C++/2521 * typeck.c (build_x_unary_op): Handle pointer-to-member. From-SVN: r58714 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/typeck.c | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index aa6923a16832..b6f2ff5be7a0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2002-11-01 Gabriel Dos Reis + + PR C++/2521 + * typeck.c (build_x_unary_op): Handle pointer-to-member. + 2002-10-30 Mark Mitchell PR c++/8160 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index d32696996bfb..b019d0a31b30 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4167,6 +4167,25 @@ build_x_unary_op (code, xarg) } if (code == ADDR_EXPR) { + /* A pointer to member-function can be formed only by saying + &X::mf. */ + if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE + && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg))) + { + if (TREE_CODE (xarg) != OFFSET_REF) + { + error ("invalid use of '%E' to form a pointer-to-member-function. Use a qualified-id.", + xarg); + return error_mark_node; + } + else + { + error ("parenthesis around '%E' cannot be used to form a pointer-to-member-function", + xarg); + PTRMEM_OK_P (xarg) = 1; + } + } + if (TREE_CODE (xarg) == OFFSET_REF) { ptrmem = PTRMEM_OK_P (xarg); -- 2.47.2