From fe0378ed74a626b4cfa4d1315f589dfadb817488 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Mon, 11 Aug 2003 23:11:32 +0000 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/typeck.c | 11 ++++++++--- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/conversion/ptrmem1.C | 13 +++++++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/conversion/ptrmem1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 191879fe25f..00412d447dd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2003-08-11 Mark Mitchell + + * typeck.c (merge_types): Handle cv-qualified pointer-to-member + types correctly. + 2003-08-10 Mark Mitchell PR c++/11789 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 5cb8ed4b113..f89b74ac2f6 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 aee5e84ad4a..16889895789 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-08-11 Mark Mitchell + + * g++.dg/conversion/ptrmem1.C: New test. + 2003-08-11 Jakub Jelinek 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 00000000000..ed00ea3f715 --- /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); +} -- 2.30.2