]> Cypherpunks repositories - gostls13.git/commit
reflect: keep RO flags unchanged in Value.Addr
authorKezhu Wang <kezhuw@gmail.com>
Mon, 4 May 2020 02:28:39 +0000 (02:28 +0000)
committerMatthew Dempsky <mdempsky@google.com>
Mon, 4 May 2020 18:16:49 +0000 (18:16 +0000)
commit4c003f6b780b471afbf032438eb6c7519458855b
tree154853dbc95186175af1e93c746127d53cac3fc5
parenta1ffbe9c69c716c597f74bd281ca9166e0d54ff5
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: 78e280e6d06865661b5835def74c252c94a92800
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>
src/reflect/all_test.go
src/reflect/value.go