From: Robert Griesemer Date: Fri, 19 Aug 2022 03:16:15 +0000 (-0700) Subject: go/types: match types2 errors for incorrect method receiver count X-Git-Tag: go1.20rc1~1499 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=dbc3b44f85e638c2247af02548d8b386996f4d37;p=gostls13.git go/types: match types2 errors for incorrect method receiver count Use "method has no receiver" and "method has multiple receivers" in error messages for invalid receiver counts, matching the corresponding types2 errors. For #54511. Change-Id: I96fc99440d6206c74e9416069db052234baa8248 Reviewed-on: https://go-review.googlesource.com/c/go/+/424934 Reviewed-by: Alan Donovan Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer --- diff --git a/src/go/types/resolver.go b/src/go/types/resolver.go index ae21c6d927..ae0289ad83 100644 --- a/src/go/types/resolver.go +++ b/src/go/types/resolver.go @@ -394,7 +394,7 @@ func (check *Checker) collectObjects() { if d.decl.Recv.NumFields() == 0 { // regular function if d.decl.Recv != nil { - check.error(d.decl.Recv, _BadRecv, "method is missing receiver") + check.error(d.decl.Recv, _BadRecv, "method has no receiver") // treat as function } if name == "init" || (name == "main" && check.pkg.name == "main") { diff --git a/src/go/types/signature.go b/src/go/types/signature.go index 82177a1c58..f44d257d8f 100644 --- a/src/go/types/signature.go +++ b/src/go/types/signature.go @@ -196,7 +196,7 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast recv = NewParam(token.NoPos, nil, "", Typ[Invalid]) // ignore recv below default: // more than one receiver - check.error(recvList[len(recvList)-1], _InvalidRecv, "method must have exactly one receiver") + check.error(recvList[len(recvList)-1], _InvalidRecv, "method has multiple receivers") fallthrough // continue with first receiver case 1: recv = recvList[0] diff --git a/src/go/types/testdata/check/decls2/decls2a.go b/src/go/types/testdata/check/decls2/decls2a.go index 9dff17349c..cccbf29793 100644 --- a/src/go/types/testdata/check/decls2/decls2a.go +++ b/src/go/types/testdata/check/decls2/decls2a.go @@ -86,11 +86,11 @@ func (ptr /* ERROR "invalid receiver" */ ) _() {} func (* /* ERROR "invalid receiver" */ ptr) _() {} // Methods with zero or multiple receivers. -func ( /* ERROR "missing receiver" */ ) _() {} -func (T3, * /* ERROR "exactly one receiver" */ T3) _() {} -func (T3, T3, T3 /* ERROR "exactly one receiver" */ ) _() {} -func (a, b /* ERROR "exactly one receiver" */ T3) _() {} -func (a, b, c /* ERROR "exactly one receiver" */ T3) _() {} +func ( /* ERROR "method has no receiver" */ ) _() {} +func (T3, * /* ERROR "method has multiple receivers" */ T3) _() {} +func (T3, T3, T3 /* ERROR "method has multiple receivers" */ ) _() {} +func (a, b /* ERROR "method has multiple receivers" */ T3) _() {} +func (a, b, c /* ERROR "method has multiple receivers" */ T3) _() {} // Methods associated with non-local or unnamed types. func (int /* ERROR "cannot define new methods on non-local type int" */ ) m() {}