From: Cuong Manh Le Date: Mon, 8 Nov 2021 08:51:05 +0000 (+0700) Subject: cmd/compile: remove unneeded "==" method in pre-defined "comparable" interface X-Git-Tag: go1.18beta1~445 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5344dcae4139de85b9e3d8cea81f9b65fc2bd25f;p=gostls13.git cmd/compile: remove unneeded "==" method in pre-defined "comparable" interface Fixes #49421 Change-Id: Iecf3952346ecd278198c1000014a321e230f7fa7 Reviewed-on: https://go-review.googlesource.com/c/go/+/361962 Trust: Cuong Manh Le Trust: Dan Scales Run-TryBot: Cuong Manh Le TryBot-Result: Go Bot Reviewed-by: Dan Scales --- diff --git a/src/cmd/compile/internal/reflectdata/reflect.go b/src/cmd/compile/internal/reflectdata/reflect.go index d396c249e4..4e20dbf29e 100644 --- a/src/cmd/compile/internal/reflectdata/reflect.go +++ b/src/cmd/compile/internal/reflectdata/reflect.go @@ -1304,12 +1304,6 @@ func writeITab(lsym *obj.LSym, typ, iface *types.Type) { break } } - if sigs[0].Sym.Name == "==" { - sigs = sigs[1:] - if len(sigs) == 0 { - break - } - } } if len(sigs) != 0 { base.Fatalf("incomplete itab") diff --git a/src/cmd/compile/internal/types/universe.go b/src/cmd/compile/internal/types/universe.go index d5239eb10c..13f62a3ab2 100644 --- a/src/cmd/compile/internal/types/universe.go +++ b/src/cmd/compile/internal/types/universe.go @@ -148,8 +148,8 @@ func makeErrorInterface() *Type { return NewInterface(NoPkg, []*Field{method}, false) } +// makeComparableInterface makes the the predefined "comparable" interface in the +// built-in package. It has a unique name, but no methods. func makeComparableInterface() *Type { - sig := NewSignature(NoPkg, FakeRecv(), nil, nil, nil) - method := NewField(src.NoXPos, LocalPkg.Lookup("=="), sig) - return NewInterface(NoPkg, []*Field{method}, false) + return NewInterface(NoPkg, nil, false) } diff --git a/test/typeparam/issue49421.go b/test/typeparam/issue49421.go new file mode 100644 index 0000000000..526e038bec --- /dev/null +++ b/test/typeparam/issue49421.go @@ -0,0 +1,27 @@ +// run -gcflags=-G=3 + +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func main() { + var a, b foo + bar(a, b) +} + +type foo int + +func (a foo) less(b foo) bool { + return a < b +} + +type lesser[T any] interface { + less(T) bool + comparable +} + +func bar[T lesser[T]](a, b T) { + a.less(b) +}