diff --git a/src/reflect/value.go b/src/reflect/value.go index 8d2000b0..fee32172 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -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, } diff --git a/testdata/reflect.go b/testdata/reflect.go index 06bec575..47359e66 100644 --- a/testdata/reflect.go +++ b/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}, } { diff --git a/testdata/reflect.txt b/testdata/reflect.txt index 26d7b8b4..03a7e5e5 100644 --- a/testdata/reflect.txt +++ b/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