diff options
| -rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/cp/typeck.c | 11 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/conversion/ptrmem1.C | 13 |
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); +} |
