]> Cypherpunks repositories - gostls13.git/commit
reflect: factor out special channel assignability rule from haveIdenticalUnderlyingType
authorgo101 <tapir.liu@gmail.com>
Fri, 15 Nov 2019 00:38:04 +0000 (00:38 +0000)
committerIan Lance Taylor <iant@golang.org>
Fri, 15 Nov 2019 15:17:08 +0000 (15:17 +0000)
commit4e8d27068df52eb372dc2ba7e929e47850934805
tree652b9132b07d7db6eb854290c1836a114b8a0e2d
parentdd8bbc76c579767fb037b90cf7f49d8d41b7f3b0
reflect: factor out special channel assignability rule from haveIdenticalUnderlyingType

Go specification says: A value x is assignable to a variable of type T if x
is a bidirectional channel value, T is a channel type, x's type V and T have
identical element types, and at least one of V or T is not a defined type.
However, the current reflection implementation is incorrect which makes
"x is assignable to T" even if type V and T are both defined type.

The current reflection implementation also mistakes the base types of two
non-defined pointer types share the same underlying type when the two
base types satisfy the above mentioned special channel assignability rule.

Fixes #29469

Change-Id: Ia4b9c4ac47dc8e76a11faef422b2e5c5726b78b3
GitHub-Last-Rev: 487c20a564091a1d2ba5feb95ab5196331c699c2
GitHub-Pull-Request: golang/go#29739
Reviewed-on: https://go-review.googlesource.com/c/go/+/157822
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/reflect/all_test.go
src/reflect/type.go
src/reflect/value.go