// UNREVIEWED
// Copyright 2020 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.

// Check "infinite expansion" cycle errors across instantiated types.

package p

type E0[P any] P
type E1[P any] *P
type E2[P any] struct{ P }
type E3[P any] struct{ *P }

type T0 /* ERROR illegal cycle */ struct {
        _ E0[T0]
}

type T0_ /* ERROR illegal cycle */ struct {
        E0[T0_]
}

type T1 struct {
        _ E1[T1]
}

type T2 /* ERROR illegal cycle */ struct {
        _ E2[T2]
}

type T3 struct {
        _ E3[T3]
}

// some more complex cases

type T4 /* ERROR illegal cycle */ struct {
	_ E0[E2[T4]]
}

type T5 struct {
	_ E0[E2[E0[E1[E2[[10]T5]]]]]
}

type T6 /* ERROR illegal cycle */ struct {
	_ E0[[10]E2[E0[E2[E2[T6]]]]]
}

type T7 struct {
	_ E0[[]E2[E0[E2[E2[T6]]]]]
}
