diff --git a/src/cmd/compile/internal/types2/instantiate.go b/src/cmd/compile/internal/types2/instantiate.go index a0f6885c51..13f0661611 100644 --- a/src/cmd/compile/internal/types2/instantiate.go +++ b/src/cmd/compile/internal/types2/instantiate.go @@ -191,12 +191,6 @@ func (check *Checker) implements(V, T Type, qf Qualifier) error { // V must implement T (methods) // - check only if we have methods if Ti.NumMethods() > 0 { - // If the type argument is a pointer to a type parameter, the type argument's - // method set is empty. - // TODO(gri) is this what we want? (spec question) - if base, isPtr := deref(V); isPtr && isTypeParam(base) { - return errorf("%s has no methods", V) - } if m, wrong := check.missingMethod(V, Ti, true); m != nil { // TODO(gri) needs to print updated name to avoid major confusion in error message! // (print warning for now) diff --git a/src/cmd/compile/internal/types2/lookup.go b/src/cmd/compile/internal/types2/lookup.go index b4035e16b3..4f50ea54b1 100644 --- a/src/cmd/compile/internal/types2/lookup.go +++ b/src/cmd/compile/internal/types2/lookup.go @@ -80,12 +80,8 @@ func lookupFieldOrMethod(T Type, addressable, checkFold bool, pkg *Package, name typ, isPtr := deref(T) - // *typ where typ is an interface or type parameter has no methods. + // *typ where typ is an interface has no methods. if isPtr { - // don't look at under(typ) here - was bug (issue #47747) - if _, ok := typ.(*TypeParam); ok { - return - } if _, ok := under(typ).(*Interface); ok { return }