aboutsummaryrefslogtreecommitdiff
path: root/gcc/go/gofrontend/expressions.cc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2017-06-09 04:35:57 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2017-06-09 04:35:57 +0000
commit1ee77fbdea58944b047de8ff88901aea4e93ed7d (patch)
treefde3276ecdbc4adc9069be75cd0ed4b3fbe684f7 /gcc/go/gofrontend/expressions.cc
parent120ef1d50ab7fe53a67fb2026374b2bdd67838bd (diff)
downloadgcc-1ee77fbdea58944b047de8ff88901aea4e93ed7d.zip
gcc-1ee77fbdea58944b047de8ff88901aea4e93ed7d.tar.gz
gcc-1ee77fbdea58944b047de8ff88901aea4e93ed7d.tar.bz2
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
Diffstat (limited to 'gcc/go/gofrontend/expressions.cc')
-rw-r--r--gcc/go/gofrontend/expressions.cc4
1 files changed, 2 insertions, 2 deletions
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;
}