// Copyright 2013 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 p import "unsafe" // Test case for issue 5090 type t interface { f(u) } type u interface { t } func _() { var t t var u u t.f(t) t.f(u) u.f(t) u.f(u) } // Test case for issues #6589, #33656. type A interface { a() interface { AB } } type B interface { b() interface { AB } } type AB interface { a() interface { A B } b() interface { A B } } var x AB var y interface { A B } var _ = x == y // Test case for issue 6638. type T interface { m() [T(nil).m /* ERROR "undefined" */ ()[0]]int } // Variations of this test case. type T1 /* ERROR "invalid recursive type" */ interface { m() [x1.m()[0]]int } var x1 T1 type T2 /* ERROR "invalid recursive type" */ interface { m() [len(x2.m())]int } var x2 T2 type T3 /* ERROR "invalid recursive type" */ interface { m() [unsafe.Sizeof(x3.m)]int } var x3 T3 type T4 /* ERROR "invalid recursive type" */ interface { m() [unsafe.Sizeof(cast4(x4.m))]int // cast is invalid but we have a cycle, so all bets are off } var x4 T4 var _ = cast4(x4.m) type cast4 func()