]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/2521 (ICE in build_ptrmemfunc, at cp/typeck.c:6087)
authorGabriel Dos Reis <gdr@integrable-solutions.net>
Fri, 1 Nov 2002 13:12:24 +0000 (13:12 +0000)
committerGabriel Dos Reis <gdr@gcc.gnu.org>
Fri, 1 Nov 2002 13:12:24 +0000 (13:12 +0000)
        PR C++/2521
        * typeck.c (build_x_unary_op): Handle pointer-to-member.

From-SVN: r58714

gcc/cp/ChangeLog
gcc/cp/typeck.c

index aa6923a16832182e5847028406673193851bafc7..b6f2ff5be7a03215dfb27df13dd8851889fd0a0c 100644 (file)
@@ -1,3 +1,8 @@
+2002-11-01  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       PR C++/2521
+       * typeck.c (build_x_unary_op): Handle pointer-to-member.
+
 2002-10-30  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/8160
index d32696996bfbcaf1ca5cef755621efeb388da74c..b019d0a31b30ca458ad5ab9a42e1f2900361eb1b 100644 (file)
@@ -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);