mirror of
https://github.com/golang/go
synced 2024-11-16 19:24:49 -07:00
go/types: better error message for invalid untyped nil conversion
This is port of CL 354049 for types2 to go/type. The change is identical, but for some tweaks to the error message/position in tests, since when go/types reports the exact operation "cannot convert" instead of the general "invalid operation" like types2. Updates #48784 Change-Id: I3e99f2721501d23187fd0a8970eb1de28e0c41d8 Reviewed-on: https://go-review.googlesource.com/c/go/+/354050 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
parent
375a1fba0e
commit
ebeab63d95
@ -875,7 +875,7 @@ const (
|
||||
// context in which it is used.
|
||||
//
|
||||
// Example:
|
||||
// var _ = 1 + nil
|
||||
// var _ = 1 + new(int)
|
||||
_InvalidUntypedConversion
|
||||
|
||||
// _BadOffsetofSyntax occurs when unsafe.Offsetof is called with an argument
|
||||
|
@ -967,6 +967,12 @@ func (check *Checker) binary(x *operand, e ast.Expr, lhs, rhs ast.Expr, op token
|
||||
if isString(x.typ) != isString(y.typ) {
|
||||
return false
|
||||
}
|
||||
if x.isNil() && !hasNil(y.typ) {
|
||||
return false
|
||||
}
|
||||
if y.isNil() && !hasNil(x.typ) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
if canMix(x, &y) {
|
||||
|
4
src/go/types/testdata/check/expr2.src
vendored
4
src/go/types/testdata/check/expr2.src
vendored
@ -29,7 +29,7 @@ func arrays() {
|
||||
_ = a == b
|
||||
_ = a != b
|
||||
_ = a /* ERROR < not defined */ < b
|
||||
_ = a == nil /* ERROR cannot convert */
|
||||
_ = a /* ERROR cannot compare.*mismatched types */ == nil
|
||||
|
||||
type C [10]int
|
||||
var c C
|
||||
@ -53,7 +53,7 @@ func structs() {
|
||||
_ = s == t
|
||||
_ = s != t
|
||||
_ = s /* ERROR < not defined */ < t
|
||||
_ = s == nil /* ERROR cannot convert */
|
||||
_ = s /* ERROR cannot compare.*mismatched types */ == nil
|
||||
|
||||
type S struct {
|
||||
x int
|
||||
|
Loading…
Reference in New Issue
Block a user