aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/types2/signature.go
diff options
context:
space:
mode:
authorMichael Matloob <matloob@golang.org>2021-08-27 08:06:55 -0400
committerMichael Matloob <matloob@golang.org>2021-08-27 08:06:57 -0400
commit220bc44a4c7b8ccc15c38f593531d5f0e721485c (patch)
treeac1b44473eef42e587c36bda6e097160634598a4 /src/cmd/compile/internal/types2/signature.go
parentde83ef67acaaf5c2ce12dd831e8d3d04f02a6fc9 (diff)
parent67f7e16bcce0a3e68bf92e233ea16c8a9d2ac07a (diff)
downloadgo-dev.cmdgo.tar.gz
go-dev.cmdgo.zip
[dev.cmdgo] all: merge master (67f7e16) into dev.cmdgodev.cmdgo
Merge List: + 2021-08-27 67f7e16bcc encoding/gob: optimize decoding of []byte + 2021-08-27 2c60a99f72 cmd/compile/internal/syntax: make valid type parameter list in presence of errors + 2021-08-27 d350a66532 cmd/compile: eagerly CalcStructSize for synthetic ABI types + 2021-08-27 d7e2e2ec2b cmd/compile: delay fillinMethods to deal with mutually-recursive types + 2021-08-27 c927599783 cmd/compile: eliminate repetitive code + 2021-08-27 62f88b6dc8 cmd/compile: add types.RecalcSize + 2021-08-27 e7eee5e265 cmd/compile: remove ssagen/pgen_test.go + 2021-08-27 f153b6739b cmd/compile: use typecheck.InitUniverse in unit tests + 2021-08-26 967a8017f7 cmd/compile: move types init code into package types + 2021-08-26 af80af22b5 cmd/compile/internal/types2: do not declare new methods on instantiated types + 2021-08-26 03db2c2413 cmd/compile/internal/types2: implement TypeList.String (debugging support) + 2021-08-26 c9e05fdcf7 cmd/compile: fix reference to generic type needed by crawler + 2021-08-26 eb6a07fcf9 cmd/compile: unexport Type.Vargen + 2021-08-26 3836983779 cmd/compile/internal/types: unexport Type.Extra + 2021-08-26 1f8d4562de cmd/compile: change typecheck.iscmp into ir.Op.IsCmp Change-Id: I95c040a0e984a13a3b12c50458148007221ee300
Diffstat (limited to 'src/cmd/compile/internal/types2/signature.go')
-rw-r--r--src/cmd/compile/internal/types2/signature.go8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/types2/signature.go b/src/cmd/compile/internal/types2/signature.go
index d28e7b8944..ddad1f0311 100644
--- a/src/cmd/compile/internal/types2/signature.go
+++ b/src/cmd/compile/internal/types2/signature.go
@@ -132,7 +132,7 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams []
// Also: Don't report an error via genericType since it will be reported
// again when we type-check the signature.
// TODO(gri) maybe the receiver should be marked as invalid instead?
- if recv := asNamed(check.genericType(rname, false)); recv != nil {
+ if recv, _ := check.genericType(rname, false).(*Named); recv != nil {
recvTParams = recv.TParams().list()
}
}
@@ -211,6 +211,12 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams []
switch T := rtyp.(type) {
case *Named:
T.expand(nil)
+ // The receiver type may be an instantiated type referred to
+ // by an alias (which cannot have receiver parameters for now).
+ if T.TArgs() != nil && sig.RParams() == nil {
+ check.errorf(recv.pos, "cannot define methods on instantiated type %s", recv.typ)
+ break
+ }
// spec: "The type denoted by T is called the receiver base type; it must not
// be a pointer or interface type and it must be declared in the same package
// as the method."