mirror of https://github.com/golang/go.git
cmd/compile: better error message when referring to ambiguous method/field
Fixes #14321. Change-Id: I9c92c767b01cf7938c4808a8fef9f2936fc667bc Reviewed-on: https://go-review.googlesource.com/106119 Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
535ad8efb8
commit
3d501df441
|
|
@ -2359,6 +2359,8 @@ func typecheckMethodExpr(n *Node) *Node {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
if lookdot1(n, s, t, ms, 1) != nil {
|
if lookdot1(n, s, t, ms, 1) != nil {
|
||||||
yyerror("%v undefined (cannot refer to unexported method %v)", n, s)
|
yyerror("%v undefined (cannot refer to unexported method %v)", n, s)
|
||||||
|
} else if _, ambig := dotpath(s, t, nil, false); ambig {
|
||||||
|
yyerror("%v undefined (ambiguous selector)", n) // method or field
|
||||||
} else {
|
} else {
|
||||||
yyerror("%v undefined (type %v has no method %v)", n, t, s)
|
yyerror("%v undefined (type %v has no method %v)", n, t, s)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
// errorcheck
|
||||||
|
|
||||||
|
// Copyright 2018 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.
|
||||||
|
|
||||||
|
// Verify that error message reports _ambiguous_ method.
|
||||||
|
|
||||||
|
package p
|
||||||
|
|
||||||
|
type A struct{
|
||||||
|
H int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (A) F() {}
|
||||||
|
func (A) G() {}
|
||||||
|
|
||||||
|
type B struct{
|
||||||
|
G int
|
||||||
|
H int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (B) F() {}
|
||||||
|
|
||||||
|
type C struct {
|
||||||
|
A
|
||||||
|
B
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = C.F // ERROR "ambiguous selector"
|
||||||
|
var _ = C.G // ERROR "ambiguous selector"
|
||||||
|
var _ = C.H // ERROR "ambiguous selector"
|
||||||
|
var _ = C.I // ERROR "no method I"
|
||||||
Loading…
Reference in New Issue