1// errorcheck -0 -d=typeassert 2 3// Copyright 2015 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7package p 8 9func assertptr(x interface{}) *int { 10 return x.(*int) // ERROR "type assertion inlined" 11} 12 13func assertptr2(x interface{}) (*int, bool) { 14 z, ok := x.(*int) // ERROR "type assertion inlined" 15 return z, ok 16} 17 18func assertfunc(x interface{}) func() { 19 return x.(func()) // ERROR "type assertion inlined" 20} 21 22func assertfunc2(x interface{}) (func(), bool) { 23 z, ok := x.(func()) // ERROR "type assertion inlined" 24 return z, ok 25} 26 27func assertstruct(x interface{}) struct{ *int } { 28 return x.(struct{ *int }) // ERROR "type assertion inlined" 29} 30 31func assertstruct2(x interface{}) (struct{ *int }, bool) { 32 z, ok := x.(struct{ *int }) // ERROR "type assertion inlined" 33 return z, ok 34} 35 36func assertbig(x interface{}) complex128 { 37 return x.(complex128) // ERROR "type assertion inlined" 38} 39 40func assertbig2(x interface{}) (complex128, bool) { 41 z, ok := x.(complex128) // ERROR "type assertion inlined" 42 return z, ok 43} 44 45func assertbig2ok(x interface{}) (complex128, bool) { 46 _, ok := x.(complex128) // ERROR "type assertion inlined" 47 return 0, ok 48} 49 50func assertslice(x interface{}) []int { 51 return x.([]int) // ERROR "type assertion inlined" 52} 53 54func assertslice2(x interface{}) ([]int, bool) { 55 z, ok := x.([]int) // ERROR "type assertion inlined" 56 return z, ok 57} 58 59func assertslice2ok(x interface{}) ([]int, bool) { 60 _, ok := x.([]int) // ERROR "type assertion inlined" 61 return nil, ok 62} 63 64type I interface { 65 foo() 66} 67 68func assertInter(x interface{}) I { 69 return x.(I) // ERROR "type assertion not inlined" 70} 71func assertInter2(x interface{}) (I, bool) { 72 z, ok := x.(I) // ERROR "type assertion not inlined" 73 return z, ok 74} 75