// 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.

package p

type _[a /* ERROR "type parameters must be named" */, b] struct{}
type _[a t, b t, c /* ERROR "type parameters must be named" */ ] struct{}
type _ struct {
	t [n]byte
	t[a]
	t[a,]
	t[a, b]
	t[a, b,]
}
type _ struct {
	t [n, /* ERROR "unexpected comma; expecting ]" */ ]byte
}
type _ interface {
	t[a]
	t[a,]
	m[ /* ERROR "method must have no type parameters" */ _ _, /* ERROR mixed */ _]()
	t[a, b]
	t[a, b,]
}

func _[] /* ERROR "empty type parameter list" */ ()
func _[a /* ERROR "type parameters must be named" */, b ]()
func _[a t, b t, c /* ERROR "type parameters must be named" */ ]()

// TODO(rfindley) incorrect error message (see existing TODO in parser)
func f[a b, 0 /* ERROR "expected '\)', found 0" */ ] ()

// issue #49482
type (
	_[a *[]int] struct{}
	_[a *t,] struct{}
	_[a *t|[]int] struct{}
	_[a *t|t,] struct{}
	_[a *t|~t,] struct{}
	_[a *struct{}|t] struct{}
	_[a *t|struct{}] struct{}
	_[a *struct{}|~t] struct{}
)

// issue #51488
type (
	_[a *t|t,] struct{}
	_[a *t|t, b t] struct{}
	_[a *t|t] struct{}
	_[a *[]t|t] struct{}
	_[a ([]t)] struct{}
	_[a ([]t)|t] struct{}
)
