Type switch variables was not typechecked.
Previously it lead only to a minor consequence:
switch unsafe.Sizeof = x.(type) {
generated an inconsistent error message.
But capturing by value functionality now requries typechecking of all ONAMEs.
Fixes #9731
Change-Id: If037883cba53d85028fb97b1328696091b3b7ddd
Reviewed-on: https://go-review.googlesource.com/3600
Reviewed-by: Russ Cox <rsc@golang.org>
// multiple entry type switch or default
nvar->ntype = typenod(n->type);
}
+ typecheck(&nvar, Erv | Easgn);
+ ncase->nname = nvar;
}
}
typechecklist(ncase->nbody, Etop);
--- /dev/null
+// 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 {
+ }
+ }()
+ }
+}