go/types, types2: better error messages for certain type mismatches

When an untyped operand of a (typically binary) operation does not
match the type of the operand and an implicit conversion is not
possible, the error message should report a "type mismatch".

The type-checkers mostly did so, but not for untyped numeric types
to other types (e.g. an untyped int vs a function); in those cases
it reported that the (impossible) conversion failed.

Fix this for numeric types.
This also improves the position and messages for some incorrect
min/max built-in calls.

Fixes #73428.

Change-Id: I8af071918b73fcc72f16cc61858d7baca57fc259
Reviewed-on: https://go-review.googlesource.com/c/go/+/682495
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Mark Freeman <mark@golang.org>
Reviewed-by: Robert Griesemer <gri@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
This commit is contained in:
Robert Griesemer 2025-06-17 17:09:27 -07:00 committed by Gopher Robot
parent 2ddf542e4c
commit cae45167b7
8 changed files with 30 additions and 7 deletions

View file

@ -31,7 +31,7 @@ var (
var (
_ = b + 1 // ERROR "invalid operation.*mismatched types.*bool and untyped int"
_ = i + false // ERROR "invalid operation.*mismatched types.*int and untyped bool"
_ = iface + 1 // ERROR "invalid operation.*mismatched types.*interface *{} and int"
_ = iface + 1.0 // ERROR "invalid operation.*mismatched types.*interface *{} and float64"
_ = iface + 1 // ERROR "invalid operation.*mismatched types.*interface *{} and untyped int"
_ = iface + 1.0 // ERROR "invalid operation.*mismatched types.*interface *{} and untyped float"
_ = iface + false // ERROR "invalid operation.*mismatched types.*interface *{} and bool"
)