From: Jes Cok Date: Fri, 16 Feb 2024 21:16:29 +0000 (+0000) Subject: reflect: make Value.Comparable return true for nil interface value X-Git-Tag: go1.23rc1~1209 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e41fabd6886ec16db6026b30486e20732f89960a;p=gostls13.git reflect: make Value.Comparable return true for nil interface value Fixes #65718 Change-Id: I0b3edf9085f2d71f915bdf8ff9d312509b438c5f GitHub-Last-Rev: 9fb1ca1a631c648d1f38f75b1fcb2f878048706b GitHub-Pull-Request: golang/go#65750 Reviewed-on: https://go-review.googlesource.com/c/go/+/564795 Auto-Submit: Ian Lance Taylor Reviewed-by: Ian Lance Taylor Reviewed-by: Cherry Mui Commit-Queue: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI --- diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go index e77537c9a5..c85de721a0 100644 --- a/src/reflect/all_test.go +++ b/src/reflect/all_test.go @@ -8027,6 +8027,7 @@ func TestValue_Comparable(t *testing.T) { var a int var s []int var i interface{} = a + var iNil interface{} var iSlice interface{} = s var iArrayFalse interface{} = [2]interface{}{1, map[int]int{}} var iArrayTrue interface{} = [2]interface{}{1, struct{ I interface{} }{1}} @@ -8035,6 +8036,11 @@ func TestValue_Comparable(t *testing.T) { comparable bool deref bool }{ + { + ValueOf(&iNil), + true, + true, + }, { ValueOf(32), true, diff --git a/src/reflect/value.go b/src/reflect/value.go index 87e595155b..adb81d4641 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -3406,7 +3406,7 @@ func (v Value) Comparable() bool { return v.Type().Comparable() case Interface: - return v.Elem().Comparable() + return v.IsNil() || v.Elem().Comparable() case Struct: for i := 0; i < v.NumField(); i++ {