]> Cypherpunks.ru repositories - gostls13.git/blob - test/typeswitch3.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / typeswitch3.go
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
11 package main
12
13 import (
14         "io"
15 )
16
17 type I interface {
18         M()
19 }
20
21 func 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
43 func 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 }