1
0
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:
Cuong Manh Le 2021-10-05 23:53:07 +07:00
parent 375a1fba0e
commit ebeab63d95
3 changed files with 9 additions and 3 deletions

View File

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

View File

@ -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) {

View File

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