compiler: Don't make temporaries for constant string concatentation.

Fixes golang/go#10642.

From-SVN: r222828
This commit is contained in:
Ian Lance Taylor 2015-05-05 20:56:59 +00:00
parent 21c0a521e4
commit 5003ddad85

View file

@ -5120,13 +5120,15 @@ Binary_expression::do_flatten(Gogo* gogo, Named_object*,
if (this->left_->type()->is_string_type()
&& this->op_ == OPERATOR_PLUS)
{
if (!this->left_->is_variable())
if (!this->left_->is_variable()
&& !this->left_->is_constant())
{
temp = Statement::make_temporary(NULL, this->left_, loc);
inserter->insert(temp);
this->left_ = Expression::make_temporary_reference(temp, loc);
}
if (!this->right_->is_variable())
if (!this->right_->is_variable()
&& !this->right_->is_constant())
{
temp =
Statement::make_temporary(this->left_->type(), this->right_, loc);