compiler: fix double evaluation with interface field expression
In Interface_field_reference_expression, the interface expression is used in two places, so a temporary variable is used. Previously, we used a Set_and_use_temporary_expression, which, when evaluated twice, causes double evaluation of the underlying expression. Fix by setting the temporary once and use Temporary_reference_expression instead. Fixes golang/go#26248. Reviewed-on: https://go-review.googlesource.com/122756 From-SVN: r262533
This commit is contained in:
parent
fd7ec17d0b
commit
c0cb9a9da0
2 changed files with 3 additions and 4 deletions
|
@ -1,4 +1,4 @@
|
|||
94738979a3422e845acf358a766aabf8b9275d43
|
||||
8ad67a72a4fa59efffc891e73ecf10020e3c565d
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
|
|
@ -11886,10 +11886,9 @@ Interface_field_reference_expression::do_flatten(Gogo*, Named_object*,
|
|||
if (!this->expr_->is_variable())
|
||||
{
|
||||
Temporary_statement* temp =
|
||||
Statement::make_temporary(this->expr_->type(), NULL, this->location());
|
||||
Statement::make_temporary(NULL, this->expr_, this->location());
|
||||
inserter->insert(temp);
|
||||
this->expr_ = Expression::make_set_and_use_temporary(temp, this->expr_,
|
||||
this->location());
|
||||
this->expr_ = Expression::make_temporary_reference(temp, this->location());
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue