commit 078e78553f6e1a3727dedf10ab2825c96552e86d
Author: Jason Merrill <jason@redhat.com>
Date: Thu Apr 5 14:41:25 2012 -0400
PR c++/52596
* tree.c (lvalue_kind): Treat a deferred access control SCOPE_REF
as an lvalue.
@@ -150,8 +150,14 @@ lvalue_kind (const_tree ref)
/* A scope ref in a template, left as SCOPE_REF to support later
access checking. */
case SCOPE_REF:
- gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE(ref)));
- return lvalue_kind (TREE_OPERAND (ref, 1));
+ {
+ tree op = TREE_OPERAND (ref, 1);
+ /* The member must be an lvalue; assume it isn't a bit-field. */
+ if (TREE_CODE (op) == IDENTIFIER_NODE)
+ return clk_ordinary;
+ gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE (ref)));
+ return lvalue_kind (op);
+ }
case MAX_EXPR:
case MIN_EXPR:
new file mode 100644
@@ -0,0 +1,17 @@
+// PR c++/52596
+
+struct msgpack_zone_finalizer_array {
+ int* tail;
+};
+struct msgpack_zone {
+ msgpack_zone_finalizer_array finalizer_array;
+};
+struct zone : public msgpack_zone {
+ template <typename T> T* allocate();
+
+};
+template <typename T>
+T* zone::allocate()
+{
+ --msgpack_zone::finalizer_array.tail;
+}