diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-01-31 00:20:10 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-01-31 00:20:10 +0000 |
commit | 106aaf4f821d2a574c2e877740e513fb2eda4869 (patch) | |
tree | 0ad264db38d1315f3f7ab7a22dd919f00be68edd /gcc | |
parent | a6b483da4da1fed7788c175ea2e74bf4d782a544 (diff) | |
download | gcc-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.cc | 19 |
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; |