Commit 6033b55b by Ian Lance Taylor

compiler: insert backend type conversion for closure func ptr

    
    In Func_expression::do_get_backend when creating the backend
    representation for a closure, create a backend type conversion to
    account for potential differences between the closure struct type
    (where the number of fields is dependent on the number of values
    referenced in the closure) and the generic function descriptor type
    (struct with single function pointer field).
    
    Reviewed-on: https://go-review.googlesource.com/49255

From-SVN: r250327
parent 9e45ca5f
c49ddc84f3ce89310585aad23ab6e51ef5523748
3d9ff9bc339942922f1be3bef07c6fe2978ad81a
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
......@@ -1204,7 +1204,14 @@ Func_expression::do_get_backend(Translate_context* context)
// expression. It is a pointer to a struct whose first field points
// to the function code and whose remaining fields are the addresses
// of the closed-over variables.
return this->closure_->get_backend(context);
Bexpression *bexpr = this->closure_->get_backend(context);
// Introduce a backend type conversion, to account for any differences
// between the argument type (function descriptor, struct with a
// single field) and the closure (struct with multiple fields).
Gogo* gogo = context->gogo();
Btype *btype = this->type()->get_backend(gogo);
return gogo->backend()->convert_expression(btype, bexpr, this->location());
}
// Ast dump for function.
......
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