blob: b4bd5d8b157694871dfc77e8ad5843335cb77d79 [file] [log] [blame]
// 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 cycles
type (
T0 int
T1 /* ERROR cycle */ T1
T2 *T2
T3 /* ERROR cycle */ T4
T4 T5
T5 T3
T6 T7
T7 *T8
T8 T6
// arrays
A0 /* ERROR cycle */ [10]A0
A1 [10]*A1
A2 /* ERROR cycle */ [10]A3
A3 [10]A4
A4 A2
A5 [10]A6
A6 *A5
// slices
L0 []L0
// structs
S0 /* ERROR cycle */ struct{ _ S0 }
S1 /* ERROR cycle */ struct{ S1 }
S2 struct{ _ *S2 }
S3 struct{ *S3 }
S4 /* ERROR cycle */ struct{ S5 }
S5 struct{ S6 }
S6 S4
// pointers
P0 *P0
// functions
F0 func(F0)
F1 func() F1
F2 func(F2) F2
// interfaces
I0 /* ERROR cycle */ interface{ I0 }
I1 interface{ I2 }
I2 interface{ I3 }
I3 /* ERROR cycle */ interface{ I1 }
I4 interface{ f(I4) }
// testcase for issue 5090
I5 interface{ f(I6) }
I6 interface{ I5 }
// maps
M0 map[M0 /* ERROR invalid map key */ ]M0
// channels
C0 chan C0
)
func _() {
type (
t1 /* ERROR cycle */ t1
t2 *t2
t3 t4 /* ERROR undeclared */
t4 t5 /* ERROR undeclared */
t5 t3
// arrays
a0 /* ERROR cycle */ [10]a0
a1 [10]*a1
// slices
l0 []l0
// structs
s0 /* ERROR cycle */ struct{ _ s0 }
s1 /* ERROR cycle */ struct{ s1 }
s2 struct{ _ *s2 }
s3 struct{ *s3 }
// pointers
p0 *p0
// functions
f0 func(f0)
f1 func() f1
f2 func(f2) f2
// interfaces
i0 /* ERROR cycle */ interface{ i0 }
// maps
m0 map[m0 /* ERROR invalid map key */ ]m0
// channels
c0 chan c0
)
}
// test cases for issue 6667
type A [10]map[A /* ERROR invalid map key */ ]bool
type S struct {
m map[S /* ERROR invalid map key */ ]bool
}
// test cases for issue 7236
// (cycle detection must not be dependent on starting point of resolution)
type (
P1 *T9
T9 /* ERROR cycle */ T9
T10 /* ERROR cycle */ T10
P2 *T10
)
func (T11) m() {}
type T11 /* ERROR cycle */ struct{ T11 }
type T12 /* ERROR cycle */ struct{ T12 }
func (*T12) m() {}
type (
P3 *T13
T13 /* ERROR cycle */ T13
)
// test cases for issue 18643
// (type cycle detection when non-type expressions are involved)
type (
T14 [len(T14 /* ERROR cycle */ {})]int
T15 [][len(T15 /* ERROR cycle */ {})]int
T16 map[[len(T16 /* ERROR cycle */ {1:2})]int]int
T17 map[int][len(T17 /* ERROR cycle */ {1:2})]int
)