compiler: use correct value type in 2-case select send
In the channel-send case, the value to be sent may needs an (implicit) type conversion to the channel element type. This CL ensures that we use the correct value type for the send. Fixes golang/go#33235. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/187177 From-SVN: r273743
This commit is contained in:
parent
9bf4008473
commit
40768ee0bc
2 changed files with 4 additions and 3 deletions
|
@ -1,4 +1,4 @@
|
|||
b7bce0dbccb978d33eb8ce0bffc02fae2c2857c1
|
||||
480477ca64c3001b9c7e92ef8b978dc92a5912d2
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
|
|
@ -5880,6 +5880,7 @@ Select_statement::lower_two_case(Block* b)
|
|||
: this->clauses_->at(1));
|
||||
Location loc = this->location();
|
||||
Expression* chan = chancase.channel();
|
||||
Type* valtype = chan->type()->channel_type()->element_type();
|
||||
|
||||
Temporary_statement* chantmp = Statement::make_temporary(NULL, chan, loc);
|
||||
b->add_statement(chantmp);
|
||||
|
@ -5891,7 +5892,8 @@ Select_statement::lower_two_case(Block* b)
|
|||
{
|
||||
// if selectnbsend(chan, &val) { body } else { default body }
|
||||
|
||||
Temporary_statement* ts = Statement::make_temporary(NULL, chancase.val(), loc);
|
||||
Temporary_statement* ts =
|
||||
Statement::make_temporary(valtype, chancase.val(), loc);
|
||||
// Tell the escape analysis that the value escapes, as it may be sent
|
||||
// to a channel.
|
||||
ts->set_value_escapes();
|
||||
|
@ -5904,7 +5906,6 @@ Select_statement::lower_two_case(Block* b)
|
|||
}
|
||||
else
|
||||
{
|
||||
Type* valtype = chan->type()->channel_type()->element_type();
|
||||
Temporary_statement* ts = Statement::make_temporary(valtype, NULL, loc);
|
||||
b->add_statement(ts);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue