// run

// Copyright 2011 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 main

type T1 struct {
	Next *T2
}

type T2 T1

type T3 struct {
	Next *T4
}

type T4 T5
type T5 T6
type T6 T7
type T7 T8
type T8 T9
type T9 T3

type T10 struct {
	x struct {
		y ***struct {
			z *struct {
				Next *T11
			}
		}
	}
}

type T11 T10

type T12 struct {
	F1 *T15
	F2 *T13
	F3 *T16
}

type T13 T14
type T14 T15
type T15 T16
type T16 T17
type T17 T12

// issue 1672
type T18 *[10]T19
type T19 T18

func main() {
	_ = &T1{&T2{}}
	_ = &T2{&T2{}}
	_ = &T3{&T4{}}
	_ = &T4{&T4{}}
	_ = &T5{&T4{}}
	_ = &T6{&T4{}}
	_ = &T7{&T4{}}
	_ = &T8{&T4{}}
	_ = &T9{&T4{}}
	_ = &T12{&T15{}, &T13{}, &T16{}}

	var (
		tn    struct{ Next *T11 }
		tz    struct{ z *struct{ Next *T11 } }
		tpz   *struct{ z *struct{ Next *T11 } }
		tppz  **struct{ z *struct{ Next *T11 } }
		tpppz ***struct{ z *struct{ Next *T11 } }
		ty    struct {
			y ***struct{ z *struct{ Next *T11 } }
		}
	)
	tn.Next = &T11{}
	tz.z = &tn
	tpz = &tz
	tppz = &tpz
	tpppz = &tppz
	ty.y = tpppz
	_ = &T10{ty}

	t19s := &[10]T19{}
	_ = T18(t19s)
}
