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
-94738979a3422e845acf358a766aabf8b9275d43
+8ad67a72a4fa59efffc891e73ecf10020e3c565d
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
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;
}