cmd/compile: don't set range expr key/value type if already set

Unified IR already records the correct type for them.

Fixes #59378

Change-Id: I275c45b48f67bde55c8e2079d60b5868d0acde7f
Reviewed-on: https://go-review.googlesource.com/c/go/+/481555
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
Cuong Manh Le 2023-04-03 11:18:45 +07:00 committed by Gopher Robot
parent e7d59ed204
commit 1e5955aabd
2 changed files with 27 additions and 1 deletions

View File

@ -72,7 +72,7 @@ func typecheckrangeExpr(n *ir.RangeStmt) {
do := func(nn ir.Node, t *types.Type) { do := func(nn ir.Node, t *types.Type) {
if nn != nil { if nn != nil {
if ir.DeclaredBy(nn, n) { if ir.DeclaredBy(nn, n) && nn.Type() == nil {
nn.SetType(t) nn.SetType(t)
} else if nn.Type() != nil { } else if nn.Type() != nil {
if op, why := Assignop(t, nn.Type()); op == ir.OXXX { if op, why := Assignop(t, nn.Type()); op == ir.OXXX {

View File

@ -0,0 +1,26 @@
// compile
// Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package p
func f() {
F([]int{}, func(*int) bool { return true })
}
func F[S []E, E any](a S, fn func(*E) bool) {
for _, v := range a {
G(a, func(e E) bool { return fn(&v) })
}
}
func G[E any](s []E, f func(E) bool) int {
for i, v := range s {
if f(v) {
return i
}
}
return -1
}