Commit 36f1a35f by Ian Lance Taylor

compiler: fix missing case in Array_type::get_value_pointer

    
    Update the code in Array_type::get_value_pointer that handles
    "lvalue" context to look for both regular var expressions
    and temp var expressions, since both can appear in array/slice
    index expressions on the left hand side of assignments.
    
    Reviewed-on: https://go-review.googlesource.com/46170

From-SVN: r249486
parent 3f741f1b
a4b455aa584e0d6e362a88597f11bba1427088e2 0b93af68feb0a4135e83dd9e6c11df1563d862a9
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.
...@@ -7635,12 +7635,19 @@ Array_type::get_value_pointer(Gogo*, Expression* array, bool is_lvalue) const ...@@ -7635,12 +7635,19 @@ Array_type::get_value_pointer(Gogo*, Expression* array, bool is_lvalue) const
{ {
Temporary_reference_expression* tref = Temporary_reference_expression* tref =
array->temporary_reference_expression(); array->temporary_reference_expression();
Var_expression* ve = array->var_expression();
if (tref != NULL) if (tref != NULL)
{ {
tref = tref->copy()->temporary_reference_expression(); tref = tref->copy()->temporary_reference_expression();
tref->set_is_lvalue(); tref->set_is_lvalue();
array = tref; array = tref;
} }
else if (ve != NULL)
{
ve = new Var_expression(ve->named_object(), ve->location());
ve->set_in_lvalue_pos();
array = ve;
}
} }
return Expression::make_slice_info(array, return Expression::make_slice_info(array,
......
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