aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-08-11 23:11:32 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-08-11 23:11:32 +0000
commitfe0378ed74a626b4cfa4d1315f589dfadb817488 (patch)
tree40dc7a4413f8123f73540f67fc751c46b1409352
parent5f5e441a4ac7ba043f774d4ae879001be1dd3436 (diff)
downloadgcc-fe0378ed74a626b4cfa4d1315f589dfadb817488.zip
gcc-fe0378ed74a626b4cfa4d1315f589dfadb817488.tar.gz
gcc-fe0378ed74a626b4cfa4d1315f589dfadb817488.tar.bz2
typeck.c (merge_types): Handle cv-qualified pointer-to-member types correctly.
* typeck.c (merge_types): Handle cv-qualified pointer-to-member types correctly. * g++.dg/conversion/ptrmem1.C: New test. From-SVN: r70341
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/typeck.c11
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/conversion/ptrmem1.C13
4 files changed, 30 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 191879fe..00412d4 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2003-08-11 Mark Mitchell <mark@codesourcery.com>
+
+ * typeck.c (merge_types): Handle cv-qualified pointer-to-member
+ types correctly.
+
2003-08-10 Mark Mitchell <mark@codesourcery.com>
PR c++/11789
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 5cb8ed4..f89b74a 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -630,9 +630,14 @@ merge_types (tree t1, tree t2)
case OFFSET_TYPE:
{
- tree base = TYPE_OFFSET_BASETYPE (t1);
- tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2));
- t1 = build_offset_type (base, target);
+ int quals;
+ tree pointee;
+ quals = cp_type_quals (t1);
+ pointee = merge_types (TYPE_PTRMEM_POINTED_TO_TYPE (t1),
+ TYPE_PTRMEM_POINTED_TO_TYPE (t2));
+ t1 = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
+ pointee);
+ t1 = cp_build_qualified_type (t1, quals);
break;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index aee5e84..1688989 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2003-08-11 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/conversion/ptrmem1.C: New test.
+
2003-08-11 Jakub Jelinek <jakub@redhat.com>
PR target/11693
diff --git a/gcc/testsuite/g++.dg/conversion/ptrmem1.C b/gcc/testsuite/g++.dg/conversion/ptrmem1.C
new file mode 100644
index 0000000..ed00ea3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/conversion/ptrmem1.C
@@ -0,0 +1,13 @@
+struct S {};
+
+void f (int S::*const*);
+
+typedef int I;
+
+void f (I S::*const*);
+
+void g() {
+ int S::*const* p;
+
+ f(p);
+}