aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2005-08-25 09:06:45 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2005-08-25 09:06:45 +0000
commit5ebbc0ee56fe91238d4e75188983e866a8e37263 (patch)
tree553845a1f8ec2abce55ad3f4431f068731956809 /gcc
parent9ebbe8cc172d73e4bd1d8d02584cb356164c0a85 (diff)
downloadgcc-5ebbc0ee56fe91238d4e75188983e866a8e37263.zip
gcc-5ebbc0ee56fe91238d4e75188983e866a8e37263.tar.gz
gcc-5ebbc0ee56fe91238d4e75188983e866a8e37263.tar.bz2
re PR c++/20817 (ICE for tree check in build_offset_type)
cp: PR c++/20817 * typeck.c (build_x_unary_op): Make sure OFFSET_REF is not for a ->*. testsuite: PR c++/20817 * g++.old-deja/g++.benjamin/13908.C: Robustify expected error. From-SVN: r103481
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" }
}