Commit 3159d897 by Ian Lance Taylor

compiler: lvalue context fixes in Unary_expression::do_get_backend

    
    A couple of the Backend::var_expression invocations in
    Unary_expression::do_get_backend were selecting "lvalue" context
    incorrectly (these var exprs were not in an assignment or LHS
    position); fix is to change back to "rvalue" context.
    
    Reviewed-on: https://go-review.googlesource.com/45136

From-SVN: r249029
parent 2163b9bc
4b857cde45939f0e9f3cf89b9e347b6f6ebe0f8f 81d9f6d05c2bb92b2b3af02807713b6bed9bf053
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.
...@@ -4370,7 +4370,7 @@ Unary_expression::do_get_backend(Translate_context* context) ...@@ -4370,7 +4370,7 @@ Unary_expression::do_get_backend(Translate_context* context)
gogo->backend()->implicit_variable_set_init(implicit, buf, btype, gogo->backend()->implicit_variable_set_init(implicit, buf, btype,
true, copy_to_heap, false, true, copy_to_heap, false,
bexpr); bexpr);
bexpr = gogo->backend()->var_expression(implicit, VE_lvalue, loc); bexpr = gogo->backend()->var_expression(implicit, VE_rvalue, loc);
// If we are not copying a slice initializer to the heap, // If we are not copying a slice initializer to the heap,
// then it can be changed by the program, so if it can // then it can be changed by the program, so if it can
...@@ -4380,7 +4380,7 @@ Unary_expression::do_get_backend(Translate_context* context) ...@@ -4380,7 +4380,7 @@ Unary_expression::do_get_backend(Translate_context* context)
&& this->expr_->type()->has_pointer()) && this->expr_->type()->has_pointer())
{ {
Bexpression* root = Bexpression* root =
gogo->backend()->var_expression(implicit, VE_lvalue, loc); gogo->backend()->var_expression(implicit, VE_rvalue, loc);
root = gogo->backend()->address_expression(root, loc); root = gogo->backend()->address_expression(root, loc);
Type* type = Type::make_pointer_type(this->expr_->type()); Type* type = Type::make_pointer_type(this->expr_->type());
gogo->add_gc_root(Expression::make_backend(root, type, loc)); gogo->add_gc_root(Expression::make_backend(root, type, loc));
...@@ -4400,7 +4400,7 @@ Unary_expression::do_get_backend(Translate_context* context) ...@@ -4400,7 +4400,7 @@ Unary_expression::do_get_backend(Translate_context* context)
true, false, btype, loc); true, false, btype, loc);
gogo->backend()->immutable_struct_set_init(decl, buf, true, false, gogo->backend()->immutable_struct_set_init(decl, buf, true, false,
btype, loc, bexpr); btype, loc, bexpr);
bexpr = gogo->backend()->var_expression(decl, VE_lvalue, loc); bexpr = gogo->backend()->var_expression(decl, VE_rvalue, loc);
} }
go_assert(!this->create_temp_ || this->expr_->is_variable()); go_assert(!this->create_temp_ || this->expr_->is_variable());
......
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