| // errorcheck | |
| // Copyright 2009 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 various erroneous type switches are caught be the compiler. | |
| // Does not compile. | |
| package main | |
| import "io" | |
| func whatis(x interface{}) string { | |
| switch x.(type) { | |
| case int: | |
| return "int" | |
| case int: // ERROR "duplicate" | |
| return "int8" | |
| case io.Reader: | |
| return "Reader1" | |
| case io.Reader: // ERROR "duplicate" | |
| return "Reader2" | |
| case interface { | |
| r() | |
| w() | |
| }: | |
| return "rw" | |
| case interface { // GCCGO_ERROR "duplicate" | |
| w() | |
| r() | |
| }: // GC_ERROR "duplicate" | |
| return "wr" | |
| } | |
| return "" | |
| } | |
| func notused(x interface{}) { | |
| // The first t is in a different scope than the 2nd t; it cannot | |
| // be accessed (=> declared and not used error); but it is legal | |
| // to declare it. | |
| switch t := 0; t := x.(type) { // ERROR "declared and not used" | |
| case int: | |
| _ = t // this is using the t of "t := x.(type)" | |
| } | |
| } |