From: Michael Pratt Date: Thu, 21 Nov 2024 18:56:57 +0000 (-0500) Subject: reflect: add test of maps with keys larger than key size X-Git-Tag: go1.24rc1~122 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0dafae13605409231f410d329c86269b19814caa;p=gostls13.git reflect: add test of maps with keys larger than key size This finds the bug fixed in CL 630279. reflect mutates the SwissMapType of a map[unsafe.Pointer]unsafe.Pointer, which happened to already have the correct GroupSize for all of the maps used in the reflect tests. For #54766. Change-Id: If4428e1e799598e7512edceb3cefb2ad00cfa712 Reviewed-on: https://go-review.googlesource.com/c/go/+/630676 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Keith Randall Auto-Submit: Michael Pratt --- diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go index 687bbfc107..b2f70c1369 100644 --- a/src/reflect/all_test.go +++ b/src/reflect/all_test.go @@ -6309,6 +6309,32 @@ func TestMapOfGCKeys(t *testing.T) { } } +// Test assignment and access to a map with keys larger than word size. +func TestMapOfGCBigKey(t *testing.T) { + type KV struct { + i int64 + j int64 + } + + kvTyp := TypeFor[KV]() + mt := MapOf(kvTyp, kvTyp) + + const n = 100 + m := MakeMap(mt) + for i := 0; i < n; i++ { + kv := KV{int64(i), int64(i+1)} + m.SetMapIndex(ValueOf(kv), ValueOf(kv)) + } + + for i := 0; i < n; i++ { + kv := KV{int64(i), int64(i+1)} + elem := m.MapIndex(ValueOf(kv)).Interface().(KV) + if elem != kv { + t.Errorf("lost m[%v] = %v, want %v", kv, elem, kv) + } + } +} + func TestMapOfGCValues(t *testing.T) { type T *uintptr tt := TypeOf(T(nil))