aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/typeck.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.old-deja/g++.benjamin/13908.C2
4 files changed, 17 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 75c4500..db7443b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2005-08-25 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20817
+ * typeck.c (build_x_unary_op): Make sure OFFSET_REF is not for a
+ ->*.
+
2005-08-24 Nathan Sidwell <nathan@codesourcery.com>
PR c++/22454
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 3a3bbea..a052ed1 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -3615,11 +3615,13 @@ build_x_unary_op (enum tree_code code, tree xarg)
if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE
&& (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg)))
{
- if (TREE_CODE (xarg) != OFFSET_REF)
+ if (TREE_CODE (xarg) != OFFSET_REF
+ || !TYPE_P (TREE_OPERAND (xarg, 0)))
{
- error ("invalid use of %qE to form a pointer-to-member-function."
- " Use a qualified-id.",
+ error ("invalid use of %qE to form a pointer-to-member-function",
xarg);
+ if (TREE_CODE (xarg) != OFFSET_REF)
+ inform (" a qualified-id is required");
return error_mark_node;
}
else
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cd84c80..dc238f7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-08-25 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/20817
+ * g++.old-deja/g++.benjamin/13908.C: Robustify expected error.
+
2005-08-25 Alan Modra <amodra@bigpond.net.au>
* gcc.dg/vect/vect-52.c: Increase b[] and c[] size by one.
diff --git a/gcc/testsuite/g++.old-deja/g++.benjamin/13908.C b/gcc/testsuite/g++.old-deja/g++.benjamin/13908.C
index e265562..d18434e 100644
--- a/gcc/testsuite/g++.old-deja/g++.benjamin/13908.C
+++ b/gcc/testsuite/g++.old-deja/g++.benjamin/13908.C
@@ -17,5 +17,5 @@ void bar (chile* pobj, pmf pmethod)
{
//-edg: expected member name
//-g++: taking address of bound pointer-to-member expression
- foo = (void*) &(pobj->*pmethod); // { dg-error "" }
+ foo = (void*) &(pobj->*pmethod); // { dg-error "invalid use" }
}