diff options
author | Ian Lance Taylor <iant@golang.org> | 2022-06-26 21:52:35 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2022-06-27 09:53:22 -0700 |
commit | 5f6b6494035fb984d745efa28d334f7893e7272b (patch) | |
tree | 54a2ed3677b0dd696344fb63f5e04fd110a88b26 /gcc/go/gofrontend/expressions.cc | |
parent | 722750a44a93ce7d23e09df240d8ab700a2d30e6 (diff) | |
download | gcc-5f6b6494035fb984d745efa28d334f7893e7272b.zip gcc-5f6b6494035fb984d745efa28d334f7893e7272b.tar.gz gcc-5f6b6494035fb984d745efa28d334f7893e7272b.tar.bz2 |
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
Diffstat (limited to 'gcc/go/gofrontend/expressions.cc')
-rw-r--r-- | gcc/go/gofrontend/expressions.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 135dae02..f59f61d 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -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 { |