From 63c7a41337741eea97304e5c7a65880421d4e8b5 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Sat, 11 Mar 2023 16:03:38 -0800 Subject: [PATCH] reflect: convert non-interface to interface in Set() --- src/reflect/value.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/reflect/value.go b/src/reflect/value.go index 5c4fffc4..67580dc2 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -910,6 +910,15 @@ func (v Value) Set(x Value) { if !v.typecode.AssignableTo(x.typecode) { panic("reflect: cannot set") } + + if v.typecode.Kind() == Interface && x.typecode.Kind() != Interface { + intf := composeInterface(unsafe.Pointer(x.typecode), x.value) + x = Value{ + typecode: v.typecode, + value: unsafe.Pointer(&intf), + } + } + size := v.typecode.Size() xptr := x.value if size <= unsafe.Sizeof(uintptr(0)) && !x.isIndirect() {