reflect: fix isRegularMemory at case Array
To match cmd/compile/internal/compare.IsRegularMemory, this CL adds code for empty arrays of comparable element type. Change-Id: I205fb9bfda60be6c9aac2d9098ed3f0eb51cd0fa GitHub-Last-Rev: 40db7ed510883633374895271145678a51418426 GitHub-Pull-Request: golang/go#65252 Reviewed-on: https://go-review.googlesource.com/c/go/+/558155 Reviewed-by: Keith Randall <khr@google.com> Run-TryBot: qiulaidongfeng <2645477756@qq.com> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: qiulaidongfeng <2645477756@qq.com> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
6037c8a877
commit
3330c69476
@ -2156,7 +2156,11 @@ func isValidFieldName(fieldName string) bool {
|
|||||||
func isRegularMemory(t Type) bool {
|
func isRegularMemory(t Type) bool {
|
||||||
switch t.Kind() {
|
switch t.Kind() {
|
||||||
case Array:
|
case Array:
|
||||||
return isRegularMemory(t.Elem())
|
elem := t.Elem()
|
||||||
|
if isRegularMemory(elem) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return elem.Comparable() && t.Len() == 0
|
||||||
case Int8, Int16, Int32, Int64, Int, Uint8, Uint16, Uint32, Uint64, Uint, Uintptr, Chan, Pointer, Bool, UnsafePointer:
|
case Int8, Int16, Int32, Int64, Int, Uint8, Uint16, Uint32, Uint64, Uint, Uintptr, Chan, Pointer, Bool, UnsafePointer:
|
||||||
return true
|
return true
|
||||||
case Struct:
|
case Struct:
|
||||||
|
@ -78,6 +78,9 @@ func TestIsRegularMemory(t *testing.T) {
|
|||||||
}{})}, true},
|
}{})}, true},
|
||||||
{"map[int][int]", args{reflect.TypeOf(map[int]int{})}, false},
|
{"map[int][int]", args{reflect.TypeOf(map[int]int{})}, false},
|
||||||
{"[4]chan int", args{reflect.TypeOf([4]chan int{})}, true},
|
{"[4]chan int", args{reflect.TypeOf([4]chan int{})}, true},
|
||||||
|
{"[0]struct{_ S}", args{reflect.TypeOf([0]struct {
|
||||||
|
_ S
|
||||||
|
}{})}, true},
|
||||||
{"struct{i int; _ S}", args{reflect.TypeOf(struct {
|
{"struct{i int; _ S}", args{reflect.TypeOf(struct {
|
||||||
i int
|
i int
|
||||||
_ S
|
_ S
|
||||||
|
Loading…
x
Reference in New Issue
Block a user