aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2012-10-12 16:14:37 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2012-10-12 14:14:37 +0000
commit5e54f81df1b2336a3ddc4f77180f4e579436b663 (patch)
tree5da8b5b508b980a39d2baba4a7cdd2679a5858b9 /gcc
parent7e4dd63d9d4143d27dfa7692039b4f48854c1d99 (diff)
downloadgcc-5e54f81df1b2336a3ddc4f77180f4e579436b663.zip
gcc-5e54f81df1b2336a3ddc4f77180f4e579436b663.tar.gz
gcc-5e54f81df1b2336a3ddc4f77180f4e579436b663.tar.bz2
re PR c++/53055 (ICE in cp_build_indirect_ref, at cp/typeck.c:2836)
2012-10-12 Marc Glisse <marc.glisse@inria.fr> PR c++/53055 gcc/c-family/ * c-common.h (enum ref_operator) [RO_ARROW_STAR]: New. gcc/cp/ * call.c (build_new_op_1): Pass RO_ARROW_STAR to cp_build_indirect_ref. * typeck.c (cp_build_indirect_ref): Handle RO_ARROW_STAR. gcc/testsuite/ * g++.dg/pr53055.C: New testcase. From-SVN: r192401
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-common.h4
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/cp/typeck.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/pr53055.C5
7 files changed, 29 insertions, 2 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 04b6971..c740e44 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,8 @@
+2012-10-12 Marc Glisse <marc.glisse@inria.fr>
+
+ PR c++/53055
+ * c-common.h (enum ref_operator) [RO_ARROW_STAR]: New.
+
2012-10-11 Eric Botcazou <ebotcazou@adacore.com>
* c-ada-spec.c (dump_ada_template): Bail out for template declarations
diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h
index cb18b4e..66d90a3 100644
--- a/gcc/c-family/c-common.h
+++ b/gcc/c-family/c-common.h
@@ -477,7 +477,9 @@ typedef enum ref_operator {
/* -> */
RO_ARROW,
/* implicit conversion */
- RO_IMPLICIT_CONVERSION
+ RO_IMPLICIT_CONVERSION,
+ /* ->* */
+ RO_ARROW_STAR
} ref_operator;
/* Information about a statement tree. */
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 549ddbd..ad76541 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2012-10-12 Marc Glisse <marc.glisse@inria.fr>
+
+ PR c++/53055
+ * call.c (build_new_op_1): Pass RO_ARROW_STAR to cp_build_indirect_ref.
+ * typeck.c (cp_build_indirect_ref): Handle RO_ARROW_STAR.
+
2012-10-11 Jason Merrill <jason@redhat.com>
* cp-tree.h (DECL_THUNKS): NULL_TREE for non-virtual functions.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 3351a58..c94bbbe 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -5309,7 +5309,7 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1,
return cp_build_array_ref (input_location, arg1, arg2, complain);
case MEMBER_REF:
- return build_m_component_ref (cp_build_indirect_ref (arg1, RO_NULL,
+ return build_m_component_ref (cp_build_indirect_ref (arg1, RO_ARROW_STAR,
complain),
arg2, complain);
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 13e75ab..eaa0935 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -2908,6 +2908,10 @@ cp_build_indirect_ref (tree ptr, ref_operator errorstring,
case RO_IMPLICIT_CONVERSION:
error ("invalid use of implicit conversion on pointer to member");
break;
+ case RO_ARROW_STAR:
+ error ("left hand operand of %<->*%> must be a pointer to class, "
+ "but is a pointer to member of type %qT", type);
+ break;
default:
gcc_unreachable ();
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9f3d299..3b9f121 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-10-12 Marc Glisse <marc.glisse@inria.fr>
+
+ PR c++/53055
+ * g++.dg/pr53055.C: New testcase.
+
2012-10-12 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/52744
diff --git a/gcc/testsuite/g++.dg/pr53055.C b/gcc/testsuite/g++.dg/pr53055.C
new file mode 100644
index 0000000..787af9d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr53055.C
@@ -0,0 +1,5 @@
+// PR c++/53055
+// { dg-do compile }
+
+struct A A :: * p ;
+int i = p ->* p ; // { dg-error "" }