From 39e740e8a789438e177f171c9a00b7fba5cb7afc Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 5 May 2015 20:56:41 +0000 Subject: [PATCH] compiler: Don't make temporaries for constant string concatentation. Fixes golang/go#10642. From-SVN: r222827 --- gcc/go/gofrontend/expressions.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 40d9aa7726bf..47773304e73d 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -5194,13 +5194,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);