This patch by Chris Manghane fixes the Go frontend to type check function parameters in a sink function declaration, as in func _(int). This fixes https://golang.org/issue/11535 . Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline.
Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 227039) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -cc7303c97b232ea979cab950d95aaf76c4e0f5b5 +81810917af7ba19e1f9f8efc8b1989f7d6419d30 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. Index: gcc/go/gofrontend/parse.cc =================================================================== --- gcc/go/gofrontend/parse.cc (revision 226846) +++ gcc/go/gofrontend/parse.cc (working copy) @@ -2305,8 +2305,20 @@ Parse::function_decl(bool saw_nointerfac if (!this->peek_token()->is_op(OPERATOR_LCURLY)) { - if (named_object == NULL && !Gogo::is_sink_name(name)) + if (named_object == NULL) { + // Function declarations with the blank identifier as a name are + // mostly ignored since they cannot be called. We make an object + // for this declaration for type-checking purposes. + if (Gogo::is_sink_name(name)) + { + static int count; + char buf[30]; + snprintf(buf, sizeof buf, ".$sinkfndecl%d", count); + ++count; + name = std::string(buf); + } + if (fntype == NULL || (expected_receiver && rec == NULL)) this->gogo_->add_erroneous_name(name);