Home | History | Annotate | Download | only in interface
      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 
      7 package p
      8 
      9 func assertptr(x interface{}) *int {
     10 	return x.(*int) // ERROR "type assertion inlined"
     11 }
     12 
     13 func assertptr2(x interface{}) (*int, bool) {
     14 	z, ok := x.(*int) // ERROR "type assertion inlined"
     15 	return z, ok
     16 }
     17 
     18 func assertfunc(x interface{}) func() {
     19 	return x.(func()) // ERROR "type assertion inlined"
     20 }
     21 
     22 func assertfunc2(x interface{}) (func(), bool) {
     23 	z, ok := x.(func()) // ERROR "type assertion inlined"
     24 	return z, ok
     25 }
     26 
     27 // TODO(rsc): struct{*int} is stored directly in the interface
     28 // and should be possible to fetch back out of the interface,
     29 // but more of the general data movement code needs to
     30 // realize that before we can inline the assertion.
     31 
     32 func assertstruct(x interface{}) struct{ *int } {
     33 	return x.(struct{ *int }) // ERROR "type assertion not inlined"
     34 }
     35 
     36 func assertstruct2(x interface{}) (struct{ *int }, bool) {
     37 	z, ok := x.(struct{ *int }) // ERROR "type assertion not inlined"
     38 	return z, ok
     39 }
     40 
     41 func assertbig(x interface{}) complex128 {
     42 	return x.(complex128) // ERROR "type assertion not inlined"
     43 }
     44 
     45 func assertbig2(x interface{}) (complex128, bool) {
     46 	z, ok := x.(complex128) // ERROR "type assertion not inlined"
     47 	return z, ok
     48 }
     49 
     50 func assertbig2ok(x interface{}) (complex128, bool) {
     51 	_, ok := x.(complex128) // ERROR "type assertion [(]ok only[)] inlined"
     52 	return 0, ok
     53 }
     54