reflect: track flags when size changes from fits-in-pointer to not
Fixes #3328
Этот коммит содержится в:
родитель
5293d3e5f0
коммит
86f125cf72
3 изменённых файлов: 16 добавлений и 1 удалений
|
@ -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
testdata/reflect.go
предоставленный
1
testdata/reflect.go
предоставленный
|
@ -129,6 +129,7 @@ func main() {
|
|||
&linkedList{
|
||||
foo: 42,
|
||||
},
|
||||
struct{ A, B uintptr }{2, 3},
|
||||
// interfaces
|
||||
[]interface{}{3, "str", -4 + 2.5i},
|
||||
} {
|
||||
|
|
14
testdata/reflect.txt
предоставленный
14
testdata/reflect.txt
предоставленный
|
@ -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
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче