mirror of
https://github.com/golang/go
synced 2024-11-05 18:36:08 +00: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:
parent
91c8e5f80b
commit
63a6f305ef
2 changed files with 19 additions and 0 deletions
|
@ -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
|
||||
|
|
17
test/fixedbugs/issue11737.go
Normal file
17
test/fixedbugs/issue11737.go
Normal 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\)"
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue