1// errorcheck 2 3// Copyright 2011 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7// Verify that erroneous type switches are caught by the compiler. 8// Issue 2700, among other things. 9// Does not compile. 10 11package main 12 13import ( 14 "io" 15) 16 17type I interface { 18 M() 19} 20 21func main() { 22 var x I 23 switch x.(type) { 24 case string: // ERROR "impossible" 25 println("FAIL") 26 } 27 28 // Issue 2700: if the case type is an interface, nothing is impossible 29 30 var r io.Reader 31 32 _, _ = r.(io.Writer) 33 34 switch r.(type) { 35 case io.Writer: 36 } 37 38 // Issue 2827. 39 switch _ := r.(type) { // ERROR "invalid variable name _|no new variables?" 40 } 41} 42 43func noninterface() { 44 var i int 45 switch i.(type) { // ERROR "cannot type switch on non-interface value|not an interface" 46 case string: 47 case int: 48 } 49 50 type S struct { 51 name string 52 } 53 var s S 54 switch s.(type) { // ERROR "cannot type switch on non-interface value|not an interface" 55 } 56} 57