blob: 59248231aea7bb212267be8fe2804653e0bc9278 [file] [log] [blame]
Russ Cox2b1c9b42012-02-16 23:49:30 -05001// run
Russ Coxee2d5122009-09-02 09:09:32 -07002
3// Copyright 2009 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 main
8
Rob Pike325cf8e2010-03-24 16:46:53 -07009type T1 struct {
10 x, y int
11}
12type T2 struct {
13 z, w byte
14}
Russ Coxee2d5122009-09-02 09:09:32 -070015type T3 T1
16
17type MyInt int
Rob Pike325cf8e2010-03-24 16:46:53 -070018
19func (MyInt) m(*T1) {}
Russ Coxee2d5122009-09-02 09:09:32 -070020
21func main() {
22 {
Rob Pike325cf8e2010-03-24 16:46:53 -070023 var i interface{} = new(T1)
24 _, ok1 := i.(*T1)
25 _, ok2 := i.(*T2)
26 _, ok3 := i.(*T3)
Russ Coxee2d5122009-09-02 09:09:32 -070027 if !ok1 || ok2 || ok3 {
Rob Pike325cf8e2010-03-24 16:46:53 -070028 println("*T1", ok1, ok2, ok3)
29 panic("fail")
Russ Coxee2d5122009-09-02 09:09:32 -070030 }
31 }
32 {
Rob Pike325cf8e2010-03-24 16:46:53 -070033 var i interface{} = MyInt(0)
34 _, ok1 := i.(interface {
35 m(*T1)
36 })
37 _, ok2 := i.(interface {
38 m(*T2)
39 })
40 _, ok3 := i.(interface {
41 m(*T3)
42 })
Russ Coxee2d5122009-09-02 09:09:32 -070043 if !ok1 || ok2 || ok3 {
Rob Pike325cf8e2010-03-24 16:46:53 -070044 println("T", ok1, ok2, ok3)
45 panic("fail")
Russ Coxee2d5122009-09-02 09:09:32 -070046 }
47 }
48}