// 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]]]]] }