...
Run Format

Text file src/go/types/testdata/cycles.src

Documentation: go/types/testdata

     1	// Copyright 2013 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	package cycles
     6	
     7	import "unsafe"
     8	
     9	type (
    10		T0 int
    11		T1 /* ERROR cycle */ T1
    12		T2 *T2
    13	
    14		T3 /* ERROR cycle */ T4
    15		T4 T5
    16		T5 T3
    17	
    18		T6 T7
    19		T7 *T8
    20		T8 T6
    21	
    22		// arrays
    23		A0 /* ERROR cycle */ [10]A0
    24		A1 [10]*A1
    25	
    26		A2 /* ERROR cycle */ [10]A3
    27		A3 [10]A4
    28		A4 A2
    29	
    30		A5 [10]A6
    31		A6 *A5
    32	
    33		// slices
    34		L0 []L0
    35	
    36		// structs
    37		S0 /* ERROR cycle */ struct{ _ S0 }
    38		S1 /* ERROR cycle */ struct{ S1 }
    39		S2 struct{ _ *S2 }
    40		S3 struct{ *S3 }
    41	
    42		S4 /* ERROR cycle */ struct{ S5 }
    43		S5 struct{ S6 }
    44		S6 S4
    45	
    46		// pointers
    47		P0 *P0
    48	
    49		// functions
    50		F0 func(F0)
    51		F1 func() F1
    52		F2 func(F2) F2
    53	
    54		// interfaces
    55		I0 /* ERROR cycle */ interface{ I0 }
    56	
    57		I1 /* ERROR cycle */ interface{ I2 }
    58		I2 interface{ I3 }
    59		I3 interface{ I1 }
    60	
    61		I4 interface{ f(I4) }
    62	
    63		// testcase for issue 5090
    64		I5 interface{ f(I6) }
    65		I6 interface{ I5 }
    66	
    67		// maps
    68		M0 map[M0 /* ERROR invalid map key */ ]M0
    69	
    70		// channels
    71		C0 chan C0
    72	)
    73	
    74	func _() {
    75		type (
    76			t1 /* ERROR cycle */ t1
    77			t2 *t2
    78	
    79			t3 t4 /* ERROR undeclared */
    80			t4 t5 /* ERROR undeclared */
    81			t5 t3
    82	
    83			// arrays
    84			a0 /* ERROR cycle */ [10]a0
    85			a1 [10]*a1
    86	
    87			// slices
    88			l0 []l0
    89	
    90			// structs
    91			s0 /* ERROR cycle */ struct{ _ s0 }
    92			s1 /* ERROR cycle */ struct{ s1 }
    93			s2 struct{ _ *s2 }
    94			s3 struct{ *s3 }
    95	
    96			// pointers
    97			p0 *p0
    98	
    99			// functions
   100			f0 func(f0)
   101			f1 func() f1
   102			f2 func(f2) f2
   103	
   104			// interfaces
   105			i0 /* ERROR cycle */ interface{ i0 }
   106	
   107			// maps
   108			m0 map[m0 /* ERROR invalid map key */ ]m0
   109	
   110			// channels
   111			c0 chan c0
   112		)
   113	}
   114	
   115	// test cases for issue 6667
   116	
   117	type A [10]map[A /* ERROR invalid map key */ ]bool
   118	
   119	type S struct {
   120		m map[S /* ERROR invalid map key */ ]bool
   121	}
   122	
   123	// test cases for issue 7236
   124	// (cycle detection must not be dependent on starting point of resolution)
   125	
   126	type (
   127		P1 *T9
   128		T9 /* ERROR cycle */ T9
   129	
   130		T10 /* ERROR cycle */ T10
   131		P2 *T10
   132	)
   133	
   134	func (T11) m() {}
   135	
   136	type T11 /* ERROR cycle */ struct{ T11 }
   137	
   138	type T12 /* ERROR cycle */ struct{ T12 }
   139	
   140	func (*T12) m() {}
   141	
   142	type (
   143		P3 *T13
   144		T13 /* ERROR cycle */ T13
   145	)
   146	
   147	// test cases for issue 18643
   148	// (type cycle detection when non-type expressions are involved)
   149	type (
   150		T14 /* ERROR cycle */ [len(T14{})]int
   151		T15 [][len(T15 /* ERROR cycle */ {})]int
   152		T16 map[[len(T16 /* ERROR cycle */ {1:2})]int]int
   153		T17 map[int][len(T17 /* ERROR cycle */ {1:2})]int
   154	)
   155	
   156	// Test case for types depending on function literals (see also #22992).
   157	type T20 chan [unsafe.Sizeof(func(ch T20){ _ = <-ch })]byte
   158	type T22 = chan [unsafe.Sizeof(func(ch T20){ _ = <-ch })]byte
   159	
   160	func _() {
   161		type T1 chan [unsafe.Sizeof(func(ch T1){ _ = <-ch })]byte
   162		type T2 = chan [unsafe.Sizeof(func(ch T2){ _ = <-ch })]byte
   163	}

View as plain text