// 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.
// We can't detect these errors anymore at the moment. See #48962 for
// details.

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 /* illegal cycle */ struct {
        _ E0[T0]
}

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

type T1 struct {
        _ E1[T1]
}

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

type T3 struct {
        _ E3[T3]
}

// some more complex cases

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

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

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

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