• go101's avatar
    reflect: factor out special channel assignability rule from haveIdenticalUnderlyingType · 4e8d2706
    go101 authored
    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: default avatarIan Lance Taylor <iant@golang.org>
    4e8d2706
all_test.go 173 KB