// 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 {
	a() interface {
		AB
	}
}

type AB interface {
	a() interface {
		A
		B
	}
	b() interface {
		A
		B
	}
}

var x AB
var y interface {
	A
	B
}

// TODO(gri) This should be a valid compare. See #33656.
var _ = x /* ERROR cannot compare */ == 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 cycle */ interface {
	m() [x1.m()[0]]int
}

var x1 T1

type T2 /* ERROR cycle */ interface {
	m() [len(x2.m())]int
}

var x2 T2

type T3 /* ERROR cycle */ interface {
	m() [unsafe.Sizeof(x3.m)]int
}

var x3 T3

type T4 /* ERROR cycle */ 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()
