cmd/gc: typecheck type switch variables

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>
This commit is contained in:
Dmitry Vyukov 2015-01-30 11:23:22 +03:00
parent c9321f3fb1
commit 8e2423a67d
2 changed files with 23 additions and 0 deletions

View file

@ -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);

View file

@ -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 {
}
}()
}
}