diff --git a/src/cmd/gc/swt.c b/src/cmd/gc/swt.c index e1d8af8786..ca5455d479 100644 --- a/src/cmd/gc/swt.c +++ b/src/cmd/gc/swt.c @@ -939,6 +939,8 @@ typecheckswitch(Node *n) // multiple entry type switch or default nvar->ntype = typenod(n->type); } + typecheck(&nvar, Erv | Easgn); + ncase->nname = nvar; } } typechecklist(ncase->nbody, Etop); diff --git a/test/fixedbugs/issue9731.go b/test/fixedbugs/issue9731.go new file mode 100644 index 0000000000..286cebd7b6 --- /dev/null +++ b/test/fixedbugs/issue9731.go @@ -0,0 +1,21 @@ +// compile + +// Copyright 2014 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(x interface{}) { + switch x := x.(type) { + case int: + func() { + _ = x + }() + case map[int]int: + func() { + for range x { + } + }() + } +}