1
0
mirror of https://github.com/golang/go synced 2024-11-26 18:06:55 -07:00

cmd/compile: diagnose invalid switch interface{} case earlier

Fixes #11737.

Change-Id: Id231b502ac5a44035dc3a02515b43bf665cb1e87
Reviewed-on: https://go-review.googlesource.com/17816
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Russ Cox 2015-12-14 13:42:13 -05:00
parent 91c8e5f80b
commit 63a6f305ef
2 changed files with 19 additions and 0 deletions

View File

@ -139,6 +139,8 @@ func typecheckswitch(n *Node) {
}
case nilonly != "" && !isnil(ll.N):
Yyerror("invalid case %v in switch (can only compare %s %v to nil)", ll.N, nilonly, n.Left)
case Isinter(t) && !Isinter(ll.N.Type) && algtype1(ll.N.Type, nil) == ANOEQ:
Yyerror("invalid case %v in switch (incomparable type)", Nconv(ll.N, obj.FmtLong))
}
// type switch

View File

@ -0,0 +1,17 @@
// errorcheck
// Copyright 2015 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.
// Issue 11737 - invalid == not being caught until generated switch code was compiled
package p
func f()
func s(x interface{}) {
switch x {
case f: // ERROR "invalid case f \(type func\(\)\) in switch \(incomparable type\)"
}
}