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:
parent
3e636ab9ad
commit
346efc2850
@ -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
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user