// errorcheck -G

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

// Basic type parameter list type-checking (not syntax) errors.

package tparam1

// The predeclared identifier "any" is only visible as a constraint
// in a type parameter list.
var _ any // ERROR "undefined"
func _(_ any) // ERROR "undefined"
type _[_ any /* ok here */ ] struct{}

const N = 10

type (
        _[] struct{} // slice
        _[N] struct{} // array
        _[T any] struct{}
        _[T, T any] struct{} // ERROR "T redeclared"
        _[T1, T2 any, T3 any] struct{}
)

func _[T any]()
func _[T, T any]() // ERROR "T redeclared"
func _[T1, T2 any](x T1) T2

// Type parameters are visible from opening [ to end of function.
type C interface{}

func _[T interface{}]()
func _[T C]()
func _[T struct{}]() // ERROR "not an interface"
func _[T interface{ m() T }]()
func _[T1 interface{ m() T2 }, T2 interface{ m() T1 }]() {
        var _ T1
}

// TODO(gri) expand this
