|  | // 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 type switches are caught by the compiler. | 
|  | // Issue 2700, among other things. | 
|  | // Does not compile. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import ( | 
|  | "io" | 
|  | ) | 
|  |  | 
|  | type I interface { | 
|  | M() | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | var x I | 
|  | switch x.(type) { | 
|  | case string: // ERROR "impossible" | 
|  | println("FAIL") | 
|  | } | 
|  |  | 
|  | // Issue 2700: if the case type is an interface, nothing is impossible | 
|  |  | 
|  | var r io.Reader | 
|  |  | 
|  | _, _ = r.(io.Writer) | 
|  |  | 
|  | switch r.(type) { | 
|  | case io.Writer: | 
|  | } | 
|  |  | 
|  | // Issue 2827. | 
|  | switch _ := r.(type) { // ERROR "invalid variable name _|no new variables" | 
|  | } | 
|  | } | 
|  |  | 
|  | func noninterface() { | 
|  | var i int | 
|  | switch i.(type) { // ERROR "cannot type switch on non-interface value" | 
|  | case string: | 
|  | case int: | 
|  | } | 
|  |  | 
|  | type S struct { | 
|  | name string | 
|  | } | 
|  | var s S | 
|  | switch s.(type) { // ERROR "cannot type switch on non-interface value" | 
|  | } | 
|  | } |