aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2015-01-31 00:20:10 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2015-01-31 00:20:10 +0000
commit106aaf4f821d2a574c2e877740e513fb2eda4869 (patch)
tree0ad264db38d1315f3f7ab7a22dd919f00be68edd /gcc
parenta6b483da4da1fed7788c175ea2e74bf4d782a544 (diff)
downloadgcc-106aaf4f821d2a574c2e877740e513fb2eda4869.zip
gcc-106aaf4f821d2a574c2e877740e513fb2eda4869.tar.gz
gcc-106aaf4f821d2a574c2e877740e513fb2eda4869.tar.bz2
compiler: Treat map index expressions as lvalues in range expressions.
Fixes golang/go#9695. From-SVN: r220301
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/parse.cc19
1 files changed, 11 insertions, 8 deletions
diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc
index 3e7c372..29edba7 100644
--- a/gcc/go/gofrontend/parse.cc
+++ b/gcc/go/gofrontend/parse.cc
@@ -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;