From e41fabd6886ec16db6026b30486e20732f89960a Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Fri, 16 Feb 2024 21:16:29 +0000 Subject: [PATCH] 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 --- src/reflect/all_test.go | 6 ++++++ src/reflect/value.go | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) 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++ { -- 2.48.1