diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-08-11 23:11:32 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-08-11 23:11:32 +0000 |
commit | fe0378ed74a626b4cfa4d1315f589dfadb817488 (patch) | |
tree | 40dc7a4413f8123f73540f67fc751c46b1409352 | |
parent | 5f5e441a4ac7ba043f774d4ae879001be1dd3436 (diff) | |
download | gcc-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/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); +} |