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