mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 00:30:57 +00:00 
			
		
		
		
	 e76d6a456b
			
		
	
	
		e76d6a456b
		
	
	
	
	
		
			
			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>
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			964 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			964 B
		
	
	
	
		
			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 be 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"
 | |
| 	}
 | |
| }
 |