]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile/internal/types2: convert testdata/examples tests to...
authorRobert Griesemer <gri@golang.org>
Wed, 2 Jun 2021 22:36:11 +0000 (15:36 -0700)
committerRobert Griesemer <gri@golang.org>
Wed, 2 Jun 2021 23:19:30 +0000 (23:19 +0000)
Change-Id: Ida3837c9cbb970a2b49cd1598c6e6e9de8aa9690
Reviewed-on: https://go-review.googlesource.com/c/go/+/324529
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/compile/internal/types2/testdata/examples/functions.go2
src/cmd/compile/internal/types2/testdata/examples/inference.go2
src/cmd/compile/internal/types2/testdata/examples/types.go2

index 0c2a408f02162ee9bfa973fb75da2444a2d1e117..154d09f52878e226958a11ba8c5b4e79a42c64c7 100644 (file)
@@ -98,7 +98,7 @@ func g2b[P, Q any](x P, y Q) {
 // Here's an example of a recursive function call with variadic
 // arguments and type inference inferring the type parameter of
 // the caller (i.e., itself).
-func max[T interface{ type int }](x ...T) T {
+func max[T interface{ ~int }](x ...T) T {
        var x0 T
        if len(x) > 0 {
                x0 = x[0]
index b47ce75805480539dcdf5fbef2ff350f6fc9cafe..75d47d2c9b48c054a259ff183a3f0d04d16c14eb 100644 (file)
@@ -7,7 +7,7 @@
 package p
 
 type Ordered interface {
-       type int, float64, string
+       ~int|~float64|~string
 }
 
 func min[T Ordered](x, y T) T
@@ -54,7 +54,7 @@ func _() {
        mixed[int, string](1.1 /* ERROR cannot use 1.1 */ , "", false)
 }
 
-func related1[Slice interface{type []Elem}, Elem any](s Slice, e Elem)
+func related1[Slice interface{~[]Elem}, Elem any](s Slice, e Elem)
 
 func _() {
        // related1 can be called with explicit instantiation.
@@ -78,7 +78,7 @@ func _() {
        related1(si, "foo" /* ERROR cannot use "foo" */ )
 }
 
-func related2[Elem any, Slice interface{type []Elem}](e Elem, s Slice)
+func related2[Elem any, Slice interface{~[]Elem}](e Elem, s Slice)
 
 func _() {
        // related2 can be called with explicit instantiation.
index a7825ed2d9bf7c421c23c9fb78549ce889d2fe91..66e7a7b90e14ee50c5bee98f904154c6b03e7472 100644 (file)
@@ -159,7 +159,7 @@ type _ struct {
 // are type parameters. As with ordinary type definitions, the
 // types underlying properties are "inherited" but the methods
 // are not.
-func _[T interface{ m(); type int }]() {
+func _[T interface{ m(); ~int }]() {
        type L T
        var x L
 
@@ -232,11 +232,11 @@ func _[A Adder[A], B Adder[B], C Adder[A]]() {
 // The type of variables (incl. parameters and return values) cannot
 // be an interface with type constraints or be/embed comparable.
 type I interface {
-       type int
+       ~int
 }
 
 var (
-       _ interface /* ERROR contains type constraints */ {type int}
+       _ interface /* ERROR contains type constraints */ {~int}
        _ I /* ERROR contains type constraints */
 )
 
@@ -267,7 +267,7 @@ func _() {
 // (If a type list contains just a single const type, we could
 // allow it, but such type lists don't make much sense in the
 // first place.)
-func _[T interface { type int, float64 }]() {
+func _[T interface{~int|~float64}]() {
        // not valid
        const _ = T /* ERROR not constant */ (0)
        const _ T /* ERROR invalid constant type T */ = 1