1
0
mirror of https://github.com/golang/go synced 2024-09-24 07:20:14 -06:00

[dev.typeparams] cmd/compile/internal/types2: convert untyped arguments to delete

For the predeclared "delete" function, types2 was checking that the
second argument was assignable to the map's key type, but not actually
updating the Types map as appropriate. So this could leave untyped
constants in the AST.

The error "cannot convert" is somewhat less precise than the previous
"not assignable" error, but it's consistent with how types2 reports
other erroneous assignments of untyped constants.

Change-Id: Ic3ca3a3611ad0e4646c050e93088cdf992234e5f
Reviewed-on: https://go-review.googlesource.com/c/go/+/285059
Trust: Matthew Dempsky <mdempsky@google.com>
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
Matthew Dempsky 2021-01-20 17:03:36 -08:00
parent f03f934ede
commit 455c29af83
2 changed files with 3 additions and 3 deletions

View File

@ -368,8 +368,8 @@ func (check *Checker) builtin(x *operand, call *syntax.CallExpr, id builtinId) (
return
}
if !x.assignableTo(check, m.key, nil) {
check.invalidArgf(x, "%s is not assignable to %s", x, m.key)
check.assignment(x, m.key, "argument to delete")
if x.mode == invalid {
return
}

View File

@ -283,7 +283,7 @@ func delete1() {
delete() // ERROR not enough arguments
delete(1) // ERROR not enough arguments
delete(1, 2, 3) // ERROR too many arguments
delete(m, 0 /* ERROR not assignable */)
delete(m, 0 /* ERROR cannot convert */)
delete(m, s)
_ = delete /* ERROR used as value */ (m, s)