]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
In cp/ChangeLog:
authorGeoffrey Keating <geoffk@redhat.com>
Wed, 24 Jul 2002 23:01:07 +0000 (23:01 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Wed, 24 Jul 2002 23:01:07 +0000 (23:01 +0000)
* tree.c (cp_build_qualified_type_real): When copying
pointer-to-method types, unshare the record that holds
the cached pointer-to-member-function type.
In testsuite/ChangeLog:
* g++.dg/other/ptrmem4.C: New testcase.

From-SVN: r55725

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/ptrmem4.C [new file with mode: 0644]

index ba8093f13aab47bcef7e388a3bc31399f4b554b3..659ecfa5f3b4cc7159c628e3a074ca05c89ca4bc 100644 (file)
@@ -1,3 +1,9 @@
+2002-07-24  Geoffrey Keating  <geoffk@redhat.com>
+
+       * tree.c (cp_build_qualified_type_real): When copying
+       pointer-to-method types, unshare the record that holds
+       the cached pointer-to-member-function type.
+
 2002-07-23  Neil Booth  <neil@daikokuya.co.uk>
 
        * cp-tree.h (FILE_FUNCTION_PREFIX_LEN): Remove.
index b6e70ceface8e1aed2cd5957caf07c41e77294a4..ea456f00b5fd52392724242016c9581f7c6731f3 100644 (file)
@@ -644,13 +644,13 @@ cp_build_qualified_type_real (type, type_quals, complain)
   result = build_qualified_type (type, type_quals);
 
   /* If this was a pointer-to-method type, and we just made a copy,
-     then we need to clear the cached associated
-     pointer-to-member-function type; it is not valid for the new
-     type.  */
+     then we need to unshare the record that holds the cached
+     pointer-to-member-function type, because these will be distinct
+     between the unqualified and qualified types.  */
   if (result != type 
       && TREE_CODE (type) == POINTER_TYPE
       && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE)
-    TYPE_SET_PTRMEMFUNC_TYPE (result, NULL_TREE);
+    TYPE_LANG_SPECIFIC (result) = NULL;
 
   return result;
 }
index 2ee83e8006acb4a161ddeaead139789b8ac26fed..90da516a3e83018eb6ceba79e3279e051c857b45 100644 (file)
@@ -1,3 +1,7 @@
+2002-07-24  Geoffrey Keating  <geoffk@redhat.com>
+
+       * g++.dg/other/ptrmem4.C: New testcase.
+
 2002-07-24  Richard Henderson  <rth@redhat.com>
 
        * gcc.c-torture/execute/loop-2e.c: Rewrite for 64 bit and no mmap.
diff --git a/gcc/testsuite/g++.dg/other/ptrmem4.C b/gcc/testsuite/g++.dg/other/ptrmem4.C
new file mode 100644 (file)
index 0000000..4f3f541
--- /dev/null
@@ -0,0 +1,18 @@
+// Bug: This checks that the pointer-to-member-function type is not
+// shared between differently-qualified pointer-to-method types.
+
+// { dg-do compile }
+struct A
+{ 
+  void f () {}
+};
+
+void (A::*const cp)() = &A::f;
+
+int main ()
+{ 
+  void (A::* p)();
+  void (A::** ip)() = &p;
+
+  *ip = &A::f;
+}