Commit 65f52d9a by Ian Lance Taylor

compiler: Don't make temporaries for constant operands.

    
    Fixes golang/go#12616.
    
    Reviewed-on: https://go-review.googlesource.com/14645

From-SVN: r228578
parent cba9c789
651e71a729e5dcbd9dc14c1b59b6eff05bfe3d26 a4bcd319d98ddc52b3e7d16ec87d92aad868ab05
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -5200,13 +5200,13 @@ Binary_expression::do_flatten(Gogo* gogo, Named_object*, ...@@ -5200,13 +5200,13 @@ Binary_expression::do_flatten(Gogo* gogo, Named_object*,
|| (is_idiv_op || (is_idiv_op
&& (gogo->check_divide_by_zero() || gogo->check_divide_overflow()))) && (gogo->check_divide_by_zero() || gogo->check_divide_overflow())))
{ {
if (!this->left_->is_variable()) if (!this->left_->is_variable() && !this->left_->is_constant())
{ {
temp = Statement::make_temporary(NULL, this->left_, loc); temp = Statement::make_temporary(NULL, this->left_, loc);
inserter->insert(temp); inserter->insert(temp);
this->left_ = Expression::make_temporary_reference(temp, loc); this->left_ = Expression::make_temporary_reference(temp, loc);
} }
if (!this->right_->is_variable()) if (!this->right_->is_variable() && !this->right_->is_constant())
{ {
temp = temp =
Statement::make_temporary(NULL, this->right_, loc); Statement::make_temporary(NULL, this->right_, loc);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment