]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: remove unneeded "==" method in pre-defined "comparable" interface
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Mon, 8 Nov 2021 08:51:05 +0000 (15:51 +0700)
committerCuong Manh Le <cuong.manhle.vn@gmail.com>
Tue, 9 Nov 2021 00:08:42 +0000 (00:08 +0000)
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>
src/cmd/compile/internal/reflectdata/reflect.go
src/cmd/compile/internal/types/universe.go
test/typeparam/issue49421.go [new file with mode: 0644]

index d396c249e49869fe382a63aa12d4cfe1cb5a6fe1..4e20dbf29ea8cc9e0b3dabd3739c429f19938972 100644 (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")
index d5239eb10cb893e32e966293572c46fc8165325f..13f62a3ab2731309e8ffffb64c9be66be0330acc 100644 (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)
 }
diff --git a/test/typeparam/issue49421.go b/test/typeparam/issue49421.go
new file mode 100644 (file)
index 0000000..526e038
--- /dev/null
@@ -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)
+}