aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2014-05-05 18:49:39 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2014-05-05 18:49:39 +0000
commit36d06319953f53c821094eadd2310cb2dd3460fe (patch)
tree126773431519ae5c336b2b7f61849c6f57c086bf /gcc/go
parent92a87cb7ff2c62403af3fe5d229d51af660c6c73 (diff)
downloadgcc-36d06319953f53c821094eadd2310cb2dd3460fe.zip
gcc-36d06319953f53c821094eadd2310cb2dd3460fe.tar.gz
gcc-36d06319953f53c821094eadd2310cb2dd3460fe.tar.bz2
compiler: Use backend interface for set and use temporaries.
From-SVN: r210077
Diffstat (limited to 'gcc/go')
-rw-r--r--gcc/go/gofrontend/expressions.cc18
1 files changed, 9 insertions, 9 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index 3d44a2b..c52b396 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -890,16 +890,16 @@ Set_and_use_temporary_expression::do_address_taken(bool)
tree
Set_and_use_temporary_expression::do_get_tree(Translate_context* context)
{
- Bvariable* bvar = this->statement_->get_backend_variable(context);
- tree var_tree = var_to_tree(bvar);
- tree expr_tree = this->expr_->get_tree(context);
- if (var_tree == error_mark_node || expr_tree == error_mark_node)
- return error_mark_node;
Location loc = this->location();
- return build2_loc(loc.gcc_location(), COMPOUND_EXPR, TREE_TYPE(var_tree),
- build2_loc(loc.gcc_location(), MODIFY_EXPR, void_type_node,
- var_tree, expr_tree),
- var_tree);
+ Gogo* gogo = context->gogo();
+ Bvariable* bvar = this->statement_->get_backend_variable(context);
+ Bexpression* var_ref = gogo->backend()->var_expression(bvar, loc);
+
+ Bexpression* bexpr = tree_to_expr(this->expr_->get_tree(context));
+ Bstatement* set = gogo->backend()->assignment_statement(var_ref, bexpr, loc);
+ var_ref = gogo->backend()->var_expression(bvar, loc);
+ Bexpression* ret = gogo->backend()->compound_expression(set, var_ref, loc);
+ return expr_to_tree(ret);
}
// Dump.