]> Cypherpunks repositories - gostls13.git/commitdiff
go/types, types2: enable interface inference
authorRobert Griesemer <gri@golang.org>
Tue, 23 May 2023 21:32:41 +0000 (14:32 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 23 May 2023 22:13:57 +0000 (22:13 +0000)
This CL sets enableInterfaceInference to true.
If problems arise due to this during the freeze, revert this CL.

Fixes #41176.
Fixes #57192.

Change-Id: I881ea6842e9c1101b24d9780323c6af365a40d3e
Reviewed-on: https://go-review.googlesource.com/c/go/+/497657
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Robert Griesemer <gri@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
src/cmd/compile/internal/types2/unify.go
src/go/types/unify.go
src/internal/types/testdata/fixedbugs/issue39976.go
src/internal/types/testdata/fixedbugs/issue41176.go
src/internal/types/testdata/fixedbugs/issue53692.go
src/internal/types/testdata/fixedbugs/issue57192.go

index f285497b4fe02569824eccc9629c6c31b20ebc3b..7b7d7dc9e9e88f339f8183a3c4b90fff0be1ae2b 100644 (file)
@@ -56,7 +56,7 @@ const (
        // If enableInterfaceInference is set, type inference uses
        // shared methods for improved type inference involving
        // interfaces.
-       enableInterfaceInference = false
+       enableInterfaceInference = true
 
        // If traceInference is set, unification will print a trace of its operation.
        // Interpretation of trace:
index c3f71dd9f85dad331376a93b8e72f343a4452214..d5757defd6d281df9cac3f4af964856d3ab6b7a0 100644 (file)
@@ -58,7 +58,7 @@ const (
        // If enableInterfaceInference is set, type inference uses
        // shared methods for improved type inference involving
        // interfaces.
-       enableInterfaceInference = false
+       enableInterfaceInference = true
 
        // If traceInference is set, unification will print a trace of its operation.
        // Interpretation of trace:
index a66eff29f28e0c98c007f32dffb238eaa823aa7c..b622cd92874c114e9a42280e2bb5628348db1f2b 100644 (file)
@@ -12,5 +12,5 @@ func NewCache[K, V any](p policy[K, V]) {}
 func _() {
        var lru LRU[int, string]
        NewCache[int, string](&lru)
-       NewCache(& /* ERROR "does not match policy[K, V] (cannot infer K and V)" */ lru)
+       NewCache /* ERROR "cannot infer K" */ (&lru)
 }
index ecf0575bb597b45d7c01e235de776416ecd9d9d0..755e83a6327464460bf4657ced9368162885780c 100644 (file)
@@ -17,5 +17,5 @@ type I[T any] interface {
 func f[T any](x I[T]) {}
 
 func _() {
-       f(S /* ERROR "cannot infer T" */ {})
+       f(S{})
 }
index a7bd5728d43c4bb2689f97f71adbedeb6145b9d6..dc1a76c723f675deb97925eca4e1b47b03e7c6e1 100644 (file)
@@ -11,5 +11,5 @@ type LRU[K comparable, V any] struct{}
 func WithLocking2[K comparable, V any](Cache[K, V]) {}
 
 func _() {
-       WithLocking2[string](LRU /* ERROR "type LRU[string, int] of LRU[string, int]{} does not match inferred type Cache[string, int] for Cache[string, V]" */ [string, int]{})
+       WithLocking2 /* ERROR "cannot infer V" */ [string](LRU[string, int]{})
 }
index 520d63f75dd147eaf3e5b9c3adb6836141574666..6c7894ac0f1e7efdab00593254c74f344fc69aec 100644 (file)
@@ -18,5 +18,5 @@ var V2 I2[int]
 func g[T any](I1[T]) {}
 func _() {
        g(V1)
-       g(V2 /* ERROR "type I2[int] of V2 does not match inferred type I1[int] for I1[T]" */)
+       g(V2)
 }