From: Mark Mitchell Date: Mon, 11 Aug 2003 23:11:32 +0000 (+0000) Subject: typeck.c (merge_types): Handle cv-qualified pointer-to-member types correctly. X-Git-Tag: releases/gcc-3.4.0~4294 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fe0378ed74a626b4cfa4d1315f589dfadb817488;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 191879fe25f6..00412d447ddb 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 5cb8ed4b113d..f89b74ac2f6a 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 aee5e84ad4a9..16889895789a 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 000000000000..ed00ea3f7152 --- /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); +}