// 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 issue 6589.

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

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

type AB interface {
	a() interface {
		A
		B /* ERROR a redeclared */
	}
	b() interface {
		A
		B /* ERROR a redeclared */
	}
}

var x AB
var y interface {
	A
	B /* ERROR a redeclared */
}
var _ = x /* ERROR cannot compare */ == y


// Test case for issue 6638.

type T interface {
	m() [T /* ERROR no value */ (nil).m()[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
}

var x4 T4
var _ = cast4(x4.m)

type cast4 func()

// This test is symmetric to the T4 case: Here the cast is
// "correct", but it doesn't work inside the T5 interface.

type T5 /* ERROR cycle */ interface {
	m() [unsafe.Sizeof(cast5(x5.m))]int
}

var x5 T5
var _ = cast5(x5.m)

type cast5 func() [0]int
