compiler: Treat map index expressions as lvalues in range expressions.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 31 Jan 2015 00:20:10 +0000 (00:20 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 31 Jan 2015 00:20:10 +0000 (00:20 +0000)
Fixes golang/go#9695.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@220301 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/parse.cc

index 3e7c372..29edba7 100644 (file)
@@ -4011,6 +4011,16 @@ Parse::tuple_assignment(Expression_list* lhs, bool may_be_composite_lit,
 
   token = this->advance_token();
 
+  if (lhs == NULL)
+    return;
+
+  // Map expressions act differently when they are lvalues.
+  for (Expression_list::iterator plv = lhs->begin();
+       plv != lhs->end();
+       ++plv)
+    if ((*plv)->index_expression() != NULL)
+      (*plv)->index_expression()->set_is_lvalue();
+
   if (p_range_clause != NULL && token->is_keyword(KEYWORD_RANGE))
     {
       if (op != OPERATOR_EQ)
@@ -4023,7 +4033,7 @@ Parse::tuple_assignment(Expression_list* lhs, bool may_be_composite_lit,
                                                may_be_composite_lit);
 
   // We've parsed everything; check for errors.
-  if (lhs == NULL || vals == NULL)
+  if (vals == NULL)
     return;
   for (Expression_list::const_iterator pe = lhs->begin();
        pe != lhs->end();
@@ -4042,13 +4052,6 @@ Parse::tuple_assignment(Expression_list* lhs, bool may_be_composite_lit,
        return;
     }
 
-  // Map expressions act differently when they are lvalues.
-  for (Expression_list::iterator plv = lhs->begin();
-       plv != lhs->end();
-       ++plv)
-    if ((*plv)->index_expression() != NULL)
-      (*plv)->index_expression()->set_is_lvalue();
-
   Call_expression* call;
   Index_expression* map_index;
   Receive_expression* receive;