| // 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" |
| } |
| } |