]> Cypherpunks.ru repositories - gostls13.git/commitdiff
go/types, types2: replace TODO with clarifying comment
authorRobert Griesemer <gri@golang.org>
Mon, 26 Jun 2023 20:52:37 +0000 (13:52 -0700)
committerGopher Robot <gobot@golang.org>
Mon, 26 Jun 2023 21:06:37 +0000 (21:06 +0000)
This resolves an open question.
No non-comment code changes.

Change-Id: Idc92794090b2dde694394d1fcd916f6ea61f03e7
Reviewed-on: https://go-review.googlesource.com/c/go/+/506395
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>

src/cmd/compile/internal/types2/unify.go
src/go/types/unify.go

index 0f1423ff982eb224938f081da8a38d8c1c38ceef..94830e94f78ecb8cfc9e02c30e0afa4da9f5a8e6 100644 (file)
@@ -410,8 +410,11 @@ func (u *unifier) nify(x, y Type, mode unifyMode, p *ifacePair) (result bool) {
                                // recorded an underlying type (go.dev/issue/43056).
                                // Either both types are interfaces, or neither type is.
                                // If both are interfaces, they have the same methods.
-                               // TODO(gri) We probably can do this only for inexact
-                               //           unification. Need to find a failure case.
+                               //
+                               // Note: Changing the recorded type for a type parameter to
+                               // a defined type is only ok when unification is inexact.
+                               // But in exact unification, if we have a match, x and y must
+                               // be identical, so changing the recorded type for x is a no-op.
                                if yn {
                                        u.set(px, y)
                                }
index 1b1d875dad5b77501e1f0cb9aa37f9bb6510b019..bef851f4238e8ee4ad6e23fe53cde00975f774fe 100644 (file)
@@ -412,8 +412,11 @@ func (u *unifier) nify(x, y Type, mode unifyMode, p *ifacePair) (result bool) {
                                // recorded an underlying type (go.dev/issue/43056).
                                // Either both types are interfaces, or neither type is.
                                // If both are interfaces, they have the same methods.
-                               // TODO(gri) We probably can do this only for inexact
-                               //           unification. Need to find a failure case.
+                               //
+                               // Note: Changing the recorded type for a type parameter to
+                               // a defined type is only ok when unification is inexact.
+                               // But in exact unification, if we have a match, x and y must
+                               // be identical, so changing the recorded type for x is a no-op.
                                if yn {
                                        u.set(px, y)
                                }