// Add package information to disambiguate (go.dev/issue/54258).
fs, ms = check.funcString(f, true), check.funcString(m, true)
}
- *cause = check.sprintf("(wrong type for method %s)\n\t\thave %s\n\t\twant %s",
- m.Name(), fs, ms)
+ if fs == ms {
+ // We still have "want Foo, have Foo".
+ // This is most likely due to different type parameters with
+ // the same name appearing in the instantiated signatures
+ // (go.dev/issue/61685).
+ // Rather than reporting this misleading error cause, for now
+ // just point out that the method signature is incorrect.
+ // TODO(gri) should find a good way to report the root cause
+ *cause = check.sprintf("(wrong type for method %s)", m.Name())
+ break
+ }
+ *cause = check.sprintf("(wrong type for method %s)\n\t\thave %s\n\t\twant %s", m.Name(), fs, ms)
case ambigSel:
*cause = check.sprintf("(ambiguous selector %s.%s)", V, m.Name())
case ptrRecv:
// Add package information to disambiguate (go.dev/issue/54258).
fs, ms = check.funcString(f, true), check.funcString(m, true)
}
- *cause = check.sprintf("(wrong type for method %s)\n\t\thave %s\n\t\twant %s",
- m.Name(), fs, ms)
+ if fs == ms {
+ // We still have "want Foo, have Foo".
+ // This is most likely due to different type parameters with
+ // the same name appearing in the instantiated signatures
+ // (go.dev/issue/61685).
+ // Rather than reporting this misleading error cause, for now
+ // just point out that the method signature is incorrect.
+ // TODO(gri) should find a good way to report the root cause
+ *cause = check.sprintf("(wrong type for method %s)", m.Name())
+ break
+ }
+ *cause = check.sprintf("(wrong type for method %s)\n\t\thave %s\n\t\twant %s", m.Name(), fs, ms)
case ambigSel:
*cause = check.sprintf("(ambiguous selector %s.%s)", V, m.Name())
case ptrRecv:
--- /dev/null
+// Copyright 2023 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 p
+
+func _[T any](x any) {
+ f /* ERROR "T (type I[T]) does not satisfy I[T] (wrong type for method m)" */ (x.(I[T]))
+}
+
+func f[T I[T]](T) {}
+
+type I[T any] interface {
+ m(T)
+}