1
0
mirror of https://github.com/golang/go synced 2024-11-17 18:44:44 -07:00

go/types: better error when converting untyped values in assignments

The error returned by convertUntyped is 'cannot convert _ to _', which
can be misleading in contexts where an explicit conversion would be
allowed.

Arguably the error message from convertUntyped should just be 'cannot
use _ as _', as 'convert' has an explicit meaning within the spec.
Making that change caused a large number of test failures, so for now we
just fix this for assignments by interpreting the error.

For #22070

Change-Id: I4eed6f39d1a991e8df7e035ec301d28a05150eb5
Reviewed-on: https://go-review.googlesource.com/c/go/+/242083
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
Rob Findley 2020-07-12 16:57:01 -04:00 committed by Robert Findley
parent 3e636ab9ad
commit 346efc2850

View File

@ -7,6 +7,7 @@
package types
import (
"errors"
"go/ast"
"go/token"
)
@ -43,8 +44,16 @@ func (check *Checker) assignment(x *operand, T Type, context string) {
}
target = Default(x.typ)
}
check.convertUntyped(x, target)
if x.mode == invalid {
if err := check.canConvertUntyped(x, target); err != nil {
var internalErr Error
var msg string
if errors.As(err, &internalErr) {
msg = internalErr.Msg
} else {
msg = err.Error()
}
check.errorf(x.pos(), "cannot use %s as %s value in %s: %v", x, target, context, msg)
x.mode = invalid
return
}
}