go/src/reflect
Kezhu Wang 4c003f6b78 reflect: keep RO flags unchanged in Value.Addr
Currently, Value.Addr collapses flagRO, which is a combination of
flagEmbedRO and flagStickyRO, to flagStickyRO. This causes exported
fields of unexported anonymous field from Value.Addr.Elem read only.

This commit fix this by keeping all bits of flagRO from origin
value in Value.Addr. This should be safe due to following reasons:
* Result of Value.Addr is not CanSet because of it is not CanAddr
   but not flagRO.
* Addr.Elem get same flagRO as origin, so it should behave same as
   origin in CanSet.

Fixes #32772.

Change-Id: I79e086628c0fb6569a50ce63f3b95916f997eda1
GitHub-Last-Rev: 78e280e6d0
GitHub-Pull-Request: golang/go#32787
Reviewed-on: https://go-review.googlesource.com/c/go/+/183937
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-05-04 18:16:49 +00:00
..
all_test.go reflect: keep RO flags unchanged in Value.Addr 2020-05-04 18:16:49 +00:00
asm_386.s reflect: ensure correct scanning of return values 2018-09-29 20:25:24 +00:00
asm_amd64.s reflect: ensure correct scanning of return values 2018-09-29 20:25:24 +00:00
asm_arm.s reflect: ensure correct scanning of return values 2018-09-29 20:25:24 +00:00
asm_arm64.s reflect: ensure correct scanning of return values 2018-09-29 20:25:24 +00:00
asm_mips64x.s reflect: ensure correct scanning of return values 2018-09-29 20:25:24 +00:00
asm_mipsx.s reflect: ensure correct scanning of return values 2018-09-29 20:25:24 +00:00
asm_ppc64x.s reflect: ensure correct scanning of return values 2018-09-29 20:25:24 +00:00
asm_riscv64.s reflect: correct riscv64 assembly 2020-01-19 15:28:32 +00:00
asm_s390x.s reflect: fix s390x reflect method calls 2018-09-30 20:30:55 +00:00
asm_wasm.s all: rename WebAssembly instructions according to spec changes 2019-03-03 21:10:01 +00:00
deepequal.go reflect: fix panic in DeepEqual when checking a cycle 2019-09-11 00:56:01 +00:00
example_test.go reflect: add an example for Kind 2018-10-03 22:38:53 +00:00
export_test.go reflect: fix unsafe conversions reported by -d=checkptr 2019-10-22 18:09:15 +00:00
makefunc.go reflect: ensure correct scanning of return values 2018-09-29 20:25:24 +00:00
set_test.go reflect: define MyBuffer more locally in TestImplicitMapConversion 2018-04-18 12:47:39 +00:00
swapper.go internal/unsafeheader: consolidate stringHeader and sliceHeader declarations into an internal package 2020-05-01 02:31:29 +00:00
tostring_test.go
type.go internal/unsafeheader: consolidate stringHeader and sliceHeader declarations into an internal package 2020-05-01 02:31:29 +00:00
value.go reflect: keep RO flags unchanged in Value.Addr 2020-05-04 18:16:49 +00:00