Commit 8c54c36b by Ian Lance Taylor

re PR go/61273 (gccgo: ICE in Unsafe_type_conversion_expression::do_get_backend [GoSmith])

	PR go/61273
compiler: Send statements should contextually permit composite literals.

From-SVN: r218788
parent 01ada710
...@@ -3819,7 +3819,7 @@ Parse::simple_stat(bool may_be_composite_lit, bool* return_exp, ...@@ -3819,7 +3819,7 @@ Parse::simple_stat(bool may_be_composite_lit, bool* return_exp,
token = this->peek_token(); token = this->peek_token();
if (token->is_op(OPERATOR_CHANOP)) if (token->is_op(OPERATOR_CHANOP))
{ {
this->send_stmt(this->verify_not_sink(exp)); this->send_stmt(this->verify_not_sink(exp), may_be_composite_lit);
if (return_exp != NULL) if (return_exp != NULL)
*return_exp = true; *return_exp = true;
} }
...@@ -3913,13 +3913,13 @@ Parse::expression_stat(Expression* exp) ...@@ -3913,13 +3913,13 @@ Parse::expression_stat(Expression* exp)
// Channel = Expression . // Channel = Expression .
void void
Parse::send_stmt(Expression* channel) Parse::send_stmt(Expression* channel, bool may_be_composite_lit)
{ {
go_assert(this->peek_token()->is_op(OPERATOR_CHANOP)); go_assert(this->peek_token()->is_op(OPERATOR_CHANOP));
Location loc = this->location(); Location loc = this->location();
this->advance_token(); this->advance_token();
Expression* val = this->expression(PRECEDENCE_NORMAL, false, true, NULL, Expression* val = this->expression(PRECEDENCE_NORMAL, false,
NULL); may_be_composite_lit, NULL, NULL);
Statement* s = Statement::make_send_statement(channel, val, loc); Statement* s = Statement::make_send_statement(channel, val, loc);
this->gogo_->add_statement(s); this->gogo_->add_statement(s);
} }
......
...@@ -245,7 +245,7 @@ class Parse ...@@ -245,7 +245,7 @@ class Parse
void statement_list(); void statement_list();
bool statement_list_may_start_here(); bool statement_list_may_start_here();
void expression_stat(Expression*); void expression_stat(Expression*);
void send_stmt(Expression*); void send_stmt(Expression*, bool may_be_composite_lit);
void inc_dec_stat(Expression*); void inc_dec_stat(Expression*);
void assignment(Expression*, bool may_be_composite_lit, Range_clause*); void assignment(Expression*, bool may_be_composite_lit, Range_clause*);
void tuple_assignment(Expression_list*, bool may_be_composite_lit, void tuple_assignment(Expression_list*, bool may_be_composite_lit,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment