|  | // run | 
|  |  | 
|  | // 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. | 
|  |  | 
|  | package main | 
|  |  | 
|  | type T1 struct { | 
|  | x, y int | 
|  | } | 
|  | type T2 struct { | 
|  | z, w byte | 
|  | } | 
|  | type T3 T1 | 
|  |  | 
|  | type MyInt int | 
|  |  | 
|  | func (MyInt) m(*T1) {} | 
|  |  | 
|  | func main() { | 
|  | { | 
|  | var i interface{} = new(T1) | 
|  | _, ok1 := i.(*T1) | 
|  | _, ok2 := i.(*T2) | 
|  | _, ok3 := i.(*T3) | 
|  | if !ok1 || ok2 || ok3 { | 
|  | println("*T1", ok1, ok2, ok3) | 
|  | panic("fail") | 
|  | } | 
|  | } | 
|  | { | 
|  | var i interface{} = MyInt(0) | 
|  | _, ok1 := i.(interface { | 
|  | m(*T1) | 
|  | }) | 
|  | _, ok2 := i.(interface { | 
|  | m(*T2) | 
|  | }) | 
|  | _, ok3 := i.(interface { | 
|  | m(*T3) | 
|  | }) | 
|  | if !ok1 || ok2 || ok3 { | 
|  | println("T", ok1, ok2, ok3) | 
|  | panic("fail") | 
|  | } | 
|  | } | 
|  | } |