Skip to content

Commit

Permalink
cmd/compile: fix the index variable is shadowed in dictPass
Browse files Browse the repository at this point in the history
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 golang#48838.

Change-Id: I10f0bd985340f9443eefaadda6fc56e4e7e9a10c
Reviewed-on: https://go-review.googlesource.com/c/go/+/354549
Run-TryBot: Cuong Manh Le <[email protected]>
TryBot-Result: Go Bot <[email protected]>
Reviewed-by: Keith Randall <[email protected]>
Reviewed-by: Dan Scales <[email protected]>
Trust: Dan Scales <[email protected]>
  • Loading branch information
WangLeonard authored and danscales committed Oct 7, 2021
1 parent ebeab63 commit be571a3
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/cmd/compile/internal/noder/stencil.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
Expand Down
31 changes: 31 additions & 0 deletions test/typeparam/issue48838.go
Original file line number Diff line number Diff line change
@@ -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) {}

0 comments on commit be571a3

Please sign in to comment.