// to it must be unique."
assert(m.name != "_")
if alt := mset.insert(m); alt != nil {
- var err error_
- err.code = _DuplicateMethod
- if check.conf.CompilerErrorMessages {
- err.errorf(m.pos, "%s.%s redeclared in this block", obj.Name(), m.name)
+ if alt.Pos().IsKnown() {
+ check.errorf(m.pos, _DuplicateMethod, "method %s.%s already declared at %s", obj.Name(), m.name, alt.Pos())
} else {
- err.errorf(m.pos, "method %s already declared for %s", m.name, obj)
+ check.errorf(m.pos, _DuplicateMethod, "method %s.%s already declared", obj.Name(), m.name)
}
- err.recordAltDecl(alt)
- check.report(&err)
continue
}
// to it must be unique."
assert(m.name != "_")
if alt := mset.insert(m); alt != nil {
- check.errorf(m, _DuplicateMethod, "method %s already declared for %s", m.name, obj)
- check.reportAltDecl(alt)
+ if alt.Pos().IsValid() {
+ check.errorf(m, _DuplicateMethod, "method %s.%s already declared at %s", obj.Name(), m.name, alt.Pos())
+ } else {
+ check.errorf(m, _DuplicateMethod, "method %s.%s already declared", obj.Name(), m.name)
+ }
continue
}
// Methods can be declared on the original named type and the alias.
func (T0) m1() {} // GCCGO_ERROR "previous"
-func (*T0) m1() {} // ERROR "method redeclared: T0\.m1|T0\.m1 redeclared in this block|redefinition of .m1."
-func (A0) m1() {} // ERROR "T0\.m1 redeclared in this block|redefinition of .m1."
-func (A0) m1() {} // ERROR "T0\.m1 redeclared in this block|redefinition of .m1."
+func (*T0) m1() {} // ERROR "method redeclared: T0\.m1|T0\.m1 already declared|redefinition of .m1."
+func (A0) m1() {} // ERROR "T0\.m1 already declared|redefinition of .m1."
+func (A0) m1() {} // ERROR "T0\.m1 already declared|redefinition of .m1."
func (A0) m2() {}
// Type aliases and the original type name can be used interchangeably.
type T int
func (T) m() {} // GCCGO_ERROR "previous"
-func (T) m() {} // ERROR "T[.]m redeclared|redefinition"
+func (T) m() {} // ERROR "T\.m already declared|redefinition"
func (*T) p() {} // GCCGO_ERROR "previous"
-func (*T) p() {} // ERROR "[(][*]T[)][.]p redeclared|redefinition|redeclared"
+func (*T) p() {} // ERROR "T\.p already declared|redefinition"
type B = T
func (T) m() {}
-func (T) m() {} // ERROR "redeclared|redefinition"
-func (A) m() {} // ERROR "redeclared|redefinition"
-func (A) m() {} // ERROR "redeclared|redefinition"
-func (B) m() {} // ERROR "redeclared|redefinition"
-func (B) m() {} // ERROR "redeclared|redefinition"
+func (T) m() {} // ERROR "already declared|redefinition"
+func (A) m() {} // ERROR "already declared|redefinition"
+func (A) m() {} // ERROR "already declared|redefinition"
+func (B) m() {} // ERROR "already declared|redefinition"
+func (B) m() {} // ERROR "already declared|redefinition"
-func (*T) m() {} // ERROR "redeclared|redefinition"
-func (*A) m() {} // ERROR "redeclared|redefinition"
-func (*B) m() {} // ERROR "redeclared|redefinition"
+func (*T) m() {} // ERROR "already declared|redefinition"
+func (*A) m() {} // ERROR "already declared|redefinition"
+func (*B) m() {} // ERROR "already declared|redefinition"
type T struct{}
func (t *T) M(int, string) // GCCGO_ERROR "previous"
-func (t *T) M(int, float64) {} // ERROR "redeclared|redefinition"
+func (t *T) M(int, float64) {} // ERROR "already declared|redefinition"
func (t T) H() // GCCGO_ERROR "previous"
-func (t *T) H() {} // ERROR "redeclared|redefinition"
+func (t *T) H() {} // ERROR "already declared|redefinition"
func f(int, string) // GCCGO_ERROR "previous"
func f(int, float64) {} // ERROR "redeclared|redefinition"