mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +00:00
cmd/compile: fix the index variable is shadowed in dictPass
The CL 349613 causes this problem. In fact, we want to use the outer i to find m.List[i], but the newly created index variable i in the nearest for range shadow the outer i. Fixes #48838. Change-Id: I10f0bd985340f9443eefaadda6fc56e4e7e9a10c Reviewed-on: https://go-review.googlesource.com/c/go/+/354549 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Dan Scales <danscales@google.com> Trust: Dan Scales <danscales@google.com>
This commit is contained in:
parent
ebeab63d95
commit
be571a36c7
|
@ -1298,9 +1298,9 @@ func (g *irgen) dictPass(info *instInfo) {
|
|||
// Type switch from nonempty interface. We need a *runtime.itab
|
||||
// for the dynamic type.
|
||||
ix := -1
|
||||
for i, ic := range info.dictInfo.itabConvs {
|
||||
for j, ic := range info.dictInfo.itabConvs {
|
||||
if ic == m.List[i] {
|
||||
ix = info.dictInfo.startItabConv + i
|
||||
ix = info.dictInfo.startItabConv + j
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
31
test/typeparam/issue48838.go
Normal file
31
test/typeparam/issue48838.go
Normal file
|
@ -0,0 +1,31 @@
|
|||
// run -gcflags=-G=3
|
||||
|
||||
// Copyright 2021 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 main
|
||||
|
||||
func main() {
|
||||
check[string]()
|
||||
}
|
||||
|
||||
func check[T any]() {
|
||||
var result setter[T]
|
||||
switch result.(type) {
|
||||
case fooA[T]:
|
||||
case fooB[T]:
|
||||
}
|
||||
}
|
||||
|
||||
type setter[T any] interface {
|
||||
Set(T)
|
||||
}
|
||||
|
||||
type fooA[T any] struct{}
|
||||
|
||||
func (fooA[T]) Set(T) {}
|
||||
|
||||
type fooB[T any] struct{}
|
||||
|
||||
func (fooB[T]) Set(T) {}
|
Loading…
Reference in a new issue