This patch by Chris Manghane changes the Go frontend to use the backend interface for set-and-use temporary variables. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline.
Ian
diff -r 9ec9e72945e4 go/expressions.cc --- a/go/expressions.cc Mon May 05 13:54:25 2014 -0400 +++ b/go/expressions.cc Mon May 05 14:40:12 2014 -0400 @@ -890,16 +890,16 @@ tree Set_and_use_temporary_expression::do_get_tree(Translate_context* context) { + Location loc = this->location(); + Gogo* gogo = context->gogo(); 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); + 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.