diff options
Diffstat (limited to 'test/typeparam/tparam1.go')
-rw-r--r-- | test/typeparam/tparam1.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/test/typeparam/tparam1.go b/test/typeparam/tparam1.go new file mode 100644 index 0000000..a05f542 --- /dev/null +++ b/test/typeparam/tparam1.go @@ -0,0 +1,43 @@ +// 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 |