From 1ee77fbdea58944b047de8ff88901aea4e93ed7d Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 9 Jun 2017 04:35:57 +0000 Subject: compiler: additional lvalue/rvalue context fixes Fix lvalue/rvalue context mixup Set_and_use_temporary_expression's do_get_backend() method. Enhance Mark_lvalue_varexprs to handle conversions and temporary reference expressions, since occasionally the front end emits code such as "deref(conv(tempref)) = ...". Reviewed-on: https://go-review.googlesource.com/45141 From-SVN: r249047 --- gcc/go/gofrontend/expressions.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gcc/go/gofrontend/expressions.cc') diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 5689c77..d6d27ee 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -962,7 +962,7 @@ Set_and_use_temporary_expression::do_get_backend(Translate_context* context) Location loc = this->location(); Gogo* gogo = context->gogo(); Bvariable* bvar = this->statement_->get_backend_variable(context); - Bexpression* lvar_ref = gogo->backend()->var_expression(bvar, VE_rvalue, loc); + Bexpression* lvar_ref = gogo->backend()->var_expression(bvar, VE_lvalue, loc); Named_object* fn = context->function(); go_assert(fn != NULL); @@ -970,7 +970,7 @@ Set_and_use_temporary_expression::do_get_backend(Translate_context* context) Bexpression* bexpr = this->expr_->get_backend(context); Bstatement* set = gogo->backend()->assignment_statement(bfn, lvar_ref, bexpr, loc); - Bexpression* var_ref = gogo->backend()->var_expression(bvar, VE_lvalue, loc); + Bexpression* var_ref = gogo->backend()->var_expression(bvar, VE_rvalue, loc); Bexpression* ret = gogo->backend()->compound_expression(set, var_ref, loc); return ret; } -- cgit v1.1