compiler: don't use sink as parameter in method expression thunk
Also fix a couple of cases where the error led to a later compiler crash. Test case is https://go.dev/cl/414336. Fixes golang/go#52871 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/414354
This commit is contained in:
parent
722750a44a
commit
5f6b649403
3 changed files with 13 additions and 5 deletions
|
@ -1,4 +1,4 @@
|
|||
6edae0ef6521569e8f949aaaafa9dc1139825051
|
||||
927528cdc112fc51e0d07ee79e7a1254b586eabe
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
|
|
@ -1426,7 +1426,12 @@ Sink_expression::do_get_backend(Translate_context* context)
|
|||
Gogo* gogo = context->gogo();
|
||||
if (this->bvar_ == NULL)
|
||||
{
|
||||
go_assert(this->type_ != NULL && !this->type_->is_sink_type());
|
||||
if (this->type_ == NULL || this->type_->is_sink_type())
|
||||
{
|
||||
go_assert(saw_errors());
|
||||
return gogo->backend()->error_expression();
|
||||
}
|
||||
|
||||
Named_object* fn = context->function();
|
||||
go_assert(fn != NULL);
|
||||
Bfunction* fn_ctx = fn->func_value()->get_or_make_decl(gogo, fn);
|
||||
|
@ -15235,7 +15240,7 @@ Selector_expression::lower_method_expression(Gogo* gogo)
|
|||
p != method_parameters->end();
|
||||
++p, ++i)
|
||||
{
|
||||
if (!p->name().empty())
|
||||
if (!p->name().empty() && !Gogo::is_sink_name(p->name()))
|
||||
parameters->push_back(*p);
|
||||
else
|
||||
{
|
||||
|
|
|
@ -4654,8 +4654,11 @@ class Sink_type : public Type
|
|||
{ return false; }
|
||||
|
||||
Btype*
|
||||
do_get_backend(Gogo*)
|
||||
{ go_unreachable(); }
|
||||
do_get_backend(Gogo* gogo)
|
||||
{
|
||||
go_assert(saw_errors());
|
||||
return gogo->backend()->error_type();
|
||||
}
|
||||
|
||||
Expression*
|
||||
do_type_descriptor(Gogo*, Named_type*)
|
||||
|
|
Loading…
Add table
Reference in a new issue