1
0
mirror of https://github.com/golang/go synced 2024-11-26 23:21:22 -07:00

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:
Robert Griesemer 2018-04-10 15:56:17 -07:00
parent 535ad8efb8
commit 3d501df441
2 changed files with 35 additions and 0 deletions

View File

@ -2359,6 +2359,8 @@ func typecheckMethodExpr(n *Node) *Node {
if m == nil {
if lookdot1(n, s, t, ms, 1) != nil {
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 {
yyerror("%v undefined (type %v has no method %v)", n, t, s)
}

View File

@ -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"