mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
2163b9bcc6
commit
3159d897bd
|
|
@ -1,4 +1,4 @@
|
||||||
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)
|
||||||
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)
|
||||||
&& 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)
|
||||||
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());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue