codekingpro/portable-devtools
114k
1// errorcheck2 3// Copyright 2016 The Go Authors. All rights reserved.4// Use of this source code is governed by a BSD-style5// license that can be found in the LICENSE file.6 7// Check the compiler's switch handling that happens8// at typechecking time.9// This must be separate from other checks,10// because errors during typechecking11// prevent other errors from being discovered.12 13package main14 15// Verify that type switch statements with impossible cases are detected by the compiler.16func f0(e error) {17 switch e.(type) {18 case int: // ERROR "impossible type switch case: (int\n\t)?e \(.*type error\) cannot have dynamic type int \(missing method Error\)"19 }20}21 22// Verify that the compiler rejects multiple default cases.23func f1(e interface{}) {24 switch e {25 default:26 default: // ERROR "multiple defaults( in switch)?"27 }28 switch e.(type) {29 default:30 default: // ERROR "multiple defaults( in switch)?"31 }32}33 34type I interface {35 Foo()36}37 38type X int39 40func (*X) Foo() {}41func f2() {42 var i I43 switch i.(type) {44 case X: // ERROR "impossible type switch case: (X\n\t)?i \(.*type I\) cannot have dynamic type X \(method Foo has pointer receiver\)"45 }46}47 