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 <cuong.manhle.vn@gmail.com>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
This commit is contained in:
Cuong Manh Le 2021-11-08 15:51:05 +07:00
parent bee0c73900
commit 5344dcae41
3 changed files with 30 additions and 9 deletions

View file

@ -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")

View file

@ -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)
}

View file

@ -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)
}