From e6ccdd9d1a2263f2e55982451c4a980c119e8167 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Thu, 30 Mar 2023 13:50:50 -0700 Subject: [PATCH] reflect: another obscure RO bug --- src/reflect/value.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/reflect/value.go b/src/reflect/value.go index 95a65082..dd2691be 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -276,7 +276,9 @@ func (v Value) Addr() Value { if !v.CanAddr() { panic("reflect.Value.Addr of unaddressable value") } - flags := (v.flags & (valueFlagExported)) | v.flags.ro() + // Preserve flagRO instead of using v.flag.ro() so that + // v.Addr().Elem() is equivalent to v (#32772) + flags := v.flags & (valueFlagExported | valueFlagRO) return Value{ typecode: pointerTo(v.typecode), value: v.value,