aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/expr/ptrmem7.C21
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 31e3d97..5a3be7c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2005-07-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22545
+ * call.c (add_builtin_candidate): Adjust for changes in
+ representation of pointer-to-member types.
+
2005-07-28 Mike Stump <mrs@apple.com>
* pt.c (check_explicit_specialization): Add visibility logic.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 609fe45..cdc068c 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -1701,7 +1701,7 @@ add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
if (IS_AGGR_TYPE (c1) && DERIVED_FROM_P (c2, c1)
&& (TYPE_PTRMEMFUNC_P (type2)
- || is_complete (TREE_TYPE (TREE_TYPE (type2)))))
+ || is_complete (TYPE_PTRMEM_POINTED_TO_TYPE (type2))))
break;
}
return;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 64fa8fe..614a8b8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-07-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/22545
+ * g++.dg/expr/ptrmem7.C: New test.
+
2005-07-28 Mike Stump <mrs@apple.com>
* g++.old-deja/g++.mike/visibility-1.C: New test.
diff --git a/gcc/testsuite/g++.dg/expr/ptrmem7.C b/gcc/testsuite/g++.dg/expr/ptrmem7.C
new file mode 100644
index 0000000..a94990e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/ptrmem7.C
@@ -0,0 +1,21 @@
+// PR c++/22545
+
+struct A {
+ int member;
+ A() : member(13) {}
+};
+
+A a;
+
+struct B {
+ operator A*() { return &a; }
+};
+
+B b;
+
+int A::* member_pntr = &A::member;
+
+int main()
+{
+ return b ->* member_pntr;
+}