]> Cypherpunks.ru repositories - gostls13.git/blobdiff - test/typeswitch3.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / typeswitch3.go
index 99d08a20f777d2a863304060d0d4f5f170720e1f..2e144d81c00cef738b5ff3acadd19d1aedfa6ba3 100644 (file)
@@ -1,20 +1,56 @@
-// errchk $G -e $D/$F.go
+// 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()
+       M()
 }
 
-func main(){
-       var x I
-       switch x.(type) {
-       case string:    // ERROR "impossible"
-               println("FAIL")
-       }
+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|not an interface"
+       case string:
+       case int:
+       }
+
+       type S struct {
+               name string
+       }
+       var s S
+       switch s.(type) { // ERROR "cannot type switch on non-interface value|not an interface"
+       }
 }