From: Gabriel Dos Reis Date: Fri, 1 Nov 2002 13:12:24 +0000 (+0000) Subject: re PR c++/2521 (ICE in build_ptrmemfunc, at cp/typeck.c:6087) X-Git-Tag: releases/gcc-3.2.1~76 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=04cbc981018aac9f093d46ef876aa808fcbf036d;p=thirdparty%2Fgcc.git 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 --- 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);