// error message.
if check != nil {
check.later(func() {
- // ignore version check if method is from a different package
- // TODO(gri) this seems incorrect - see go.dev/issue/66285
- if check.pkg == m.pkg && pos.IsKnown() && !check.allowVersion(atPos(pos), go1_14) || !Identical(m.typ, other.Type()) {
+ if pos.IsKnown() && !check.allowVersion(atPos(pos), go1_14) || !Identical(m.typ, other.Type()) {
err := check.newError(DuplicateDecl)
err.addf(atPos(pos), "duplicate method %s", m.name)
err.addf(atPos(mpos[other.(*Func)]), "other declaration of %s", m.name)
// error message.
if check != nil {
check.later(func() {
- // ignore version check if method is from a different package
- // TODO(gri) this seems incorrect - see go.dev/issue/66285
- if check.pkg == m.pkg && pos.IsValid() && !check.allowVersion(atPos(pos), go1_14) || !Identical(m.typ, other.Type()) {
+ if pos.IsValid() && !check.allowVersion(atPos(pos), go1_14) || !Identical(m.typ, other.Type()) {
err := check.newError(DuplicateDecl)
err.addf(atPos(pos), "duplicate method %s", m.name)
err.addf(atPos(mpos[other.(*Func)]), "other declaration of %s", m.name)
--- /dev/null
+// -lang=go1.21
+
+// Copyright 2024 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.
+
+// Note: Downgrading to go1.13 requires at least go1.21,
+// hence the need for -lang=go1.21 at the top.
+
+//go:build go1.13
+
+package p
+
+import "io"
+
+// A "duplicate method" error should be reported for
+// all these interfaces, irrespective of which package
+// the embedded Reader is coming from.
+
+type _ interface {
+ Reader
+ Reader // ERROR "duplicate method Read"
+}
+
+type Reader interface {
+ Read(p []byte) (n int, err error)
+}
+
+type _ interface {
+ io.Reader
+ Reader // ERROR "duplicate method Read"
+}
+
+type _ interface {
+ io.Reader
+ io /* ERROR "duplicate method Read" */ .Reader
+}