From 5ebbc0ee56fe91238d4e75188983e866a8e37263 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 25 Aug 2005 09:06:45 +0000 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/typeck.c | 8 +++++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.old-deja/g++.benjamin/13908.C | 2 +- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 75c45000282..db7443b01f8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-08-25 Nathan Sidwell + + PR c++/20817 + * typeck.c (build_x_unary_op): Make sure OFFSET_REF is not for a + ->*. + 2005-08-24 Nathan Sidwell PR c++/22454 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 3a3bbea957a..a052ed168ff 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 cd84c80703b..dc238f754c6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-08-25 Nathan Sidwell + + PR c++/20817 + * g++.old-deja/g++.benjamin/13908.C: Robustify expected error. + 2005-08-25 Alan Modra * 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 e26556210e2..d18434eca19 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" } } -- 2.30.2