diff options
author | Emmanuel Odeke <emm.odeke@gmail.com> | 2017-03-25 16:17:59 -0600 |
---|---|---|
committer | Josh Bleecher Snyder <josharian@gmail.com> | 2017-03-25 22:52:54 +0000 |
commit | e76d6a456b734bd02f275303571c38bec295a6b5 (patch) | |
tree | 6006c953a2d8bc04daea9cee8b5e430d7f9c90f6 /test/typeswitch3.go | |
parent | 783f166e659558414d846d16bbe65e6fe9c7099b (diff) | |
download | go-e76d6a456b734bd02f275303571c38bec295a6b5.tar.gz go-e76d6a456b734bd02f275303571c38bec295a6b5.zip |
cmd/compile: add test for non interface type switch
Ensure that we have a test for when the compiler
encounters a type switch on a non-interface value.
Change-Id: Icb222f986894d0190e1241ca65396b4950e7d14f
Reviewed-on: https://go-review.googlesource.com/38661
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'test/typeswitch3.go')
-rw-r--r-- | test/typeswitch3.go | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/test/typeswitch3.go b/test/typeswitch3.go index 287e32e71e..58d4cba2d0 100644 --- a/test/typeswitch3.go +++ b/test/typeswitch3.go @@ -18,26 +18,39 @@ type I interface { M() } -func main(){ +func main() { var x I switch x.(type) { - case string: // ERROR "impossible" + 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" + 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" + } +} |