| // errorcheck |
| |
| // 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" may be used in place of interface{}. |
| var _ any |
| |
| func _(_ any) |
| |
| type _[_ any] 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 { panic(0) } |
| |
| // Type parameters are visible from opening [ to end of function. |
| type C interface{} |
| |
| func _[T interface{}]() {} |
| func _[T C]() {} |
| func _[T struct{}]() {} // ok if #48424 is accepted |
| func _[T interface{ m() T }]() {} |
| func _[T1 interface{ m() T2 }, T2 interface{ m() T1 }]() { |
| var _ T1 |
| } |
| |
| // TODO(gri) expand this |