| // errorcheck | |
| // Copyright 2011 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. | |
| // Verify that erroneous switch statements are detected by the compiler. | |
| // Does not compile. | |
| package main | |
| type I interface { | |
| M() | |
| } | |
| func bad() { | |
| var i I | |
| var s string | |
| switch i { | |
| case s: // ERROR "mismatched types string and I|incompatible types" | |
| } | |
| switch s { | |
| case i: // ERROR "mismatched types I and string|incompatible types" | |
| } | |
| var m, m1 map[int]int | |
| switch m { | |
| case nil: | |
| case m1: // ERROR "can only compare map m to nil|map can only be compared to nil|cannot compare" | |
| default: | |
| } | |
| var a, a1 []int | |
| switch a { | |
| case nil: | |
| case a1: // ERROR "can only compare slice a to nil|slice can only be compared to nil|cannot compare" | |
| default: | |
| } | |
| var f, f1 func() | |
| switch f { | |
| case nil: | |
| case f1: // ERROR "can only compare func f to nil|func can only be compared to nil|cannot compare" | |
| default: | |
| } | |
| var ar, ar1 [4]func() | |
| switch ar { // ERROR "cannot switch on" | |
| case ar1: | |
| default: | |
| } | |
| var st, st1 struct{ f func() } | |
| switch st { // ERROR "cannot switch on" | |
| case st1: | |
| } | |
| } | |
| func good() { | |
| var i interface{} | |
| var s string | |
| switch i { | |
| case s: | |
| } | |
| switch s { | |
| case i: | |
| } | |
| } |