diff options
author | Robert Griesemer <gri@golang.org> | 2020-10-22 15:32:05 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2020-10-27 03:37:05 +0000 |
commit | 87eab74628bc23831bd783806e8ec16927bd9a50 (patch) | |
tree | adac6d1cd51a2d77dbc10926b5be0894c2a4dfd2 /test/typeparam/tparam1.go | |
parent | 5bfd2964a6519c8046b16b41bb9f84ecb6202356 (diff) | |
download | go-87eab74628bc23831bd783806e8ec16927bd9a50.tar.gz go-87eab74628bc23831bd783806e8ec16927bd9a50.zip |
[dev.typeparams] cmd/compile: enable type-checking of generic code
This change makes a first connection between the compiler and types2.
When the -G flag is provided, the compiler accepts code using type
parameters; with this change generic code is also type-checked (but
then compilation ends).
Change-Id: I0fa6f6213267a458a6b33afe8ff26869fd838a63
Reviewed-on: https://go-review.googlesource.com/c/go/+/264303
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'test/typeparam/tparam1.go')
-rw-r--r-- | test/typeparam/tparam1.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/typeparam/tparam1.go b/test/typeparam/tparam1.go new file mode 100644 index 0000000000..5d6dcb6a62 --- /dev/null +++ b/test/typeparam/tparam1.go @@ -0,0 +1,42 @@ +// 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 "undeclared" +func _(_ any) // ERROR "undeclared" +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 |