reflect: track flags when size changes from fits-in-pointer to not

Fixes #3328
This commit is contained in:
Damian Gryski
2022-12-07 09:45:03 -08:00
committed by Ayke
parent 5293d3e5f0
commit 86f125cf72
3 changed files with 16 additions and 1 deletions
+1 -1
View File
@@ -507,7 +507,7 @@ func (v Value) Field(i int) Value {
ptr := unsafe.Pointer(uintptr(v.value) + structField.Offset)
value := unsafe.Pointer(loadValue(ptr, fieldSize))
return Value{
flags: 0,
flags: flags &^ valueFlagIndirect,
typecode: fieldType,
value: value,
}
+1
View File
@@ -129,6 +129,7 @@ func main() {
&linkedList{
foo: 42,
},
struct{ A, B uintptr }{2, 3},
// interfaces
[]interface{}{3, "str", -4 + 2.5i},
} {
+14
View File
@@ -334,6 +334,20 @@ reflect type: ptr
exported: false
reflect type: int addrable=true caninterface=false
int: 42
reflect type: struct
struct: 2
field: 0 A
tag:
embedded: false
exported: true
reflect type: uintptr
uint: 2
field: 1 B
tag:
embedded: false
exported: true
reflect type: uintptr
uint: 3
reflect type: slice comparable=false
slice: interface 3 3
pointer: true