From e76d6a456b734bd02f275303571c38bec295a6b5 Mon Sep 17 00:00:00 2001 From: Emmanuel Odeke Date: Sat, 25 Mar 2017 16:17:59 -0600 Subject: [PATCH] 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 Run-TryBot: Josh Bleecher Snyder TryBot-Result: Gobot Gobot --- test/typeswitch3.go | 29 +++++++++++++++++++++-------- 1 file 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" + } +} -- 2.48.1