// Copyright 2026 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package test import "testing" // From issue #77720. type moveLoadBenchHandle[T any] struct { value *T } func (h moveLoadBenchHandle[T]) Value() T { return *h.value } type moveLoadBenchBig struct { typ int8 index int64 str string pkgID string dummyField [1024]byte } type moveLoadBenchS struct { h moveLoadBenchHandle[moveLoadBenchBig] } var moveLoadBenchSink int8 func moveLoadBenchTypViaValue(s moveLoadBenchS) int8 { return s.h.Value().typ } func moveLoadBenchTypViaPtr(s moveLoadBenchS) int8 { return (*s.h.value).typ } func benchmarkMoveLoad(b *testing.B, f func(moveLoadBenchS) int8) { backing := make([]moveLoadBenchBig, 1<<10) ss := make([]moveLoadBenchS, len(backing)) for i := range backing { backing[i].typ = int8(i) ss[i] = moveLoadBenchS{h: moveLoadBenchHandle[moveLoadBenchBig]{&backing[i]}} } b.ResetTimer() var x int8 for i := 0; i < b.N; i++ { x += f(ss[i&(len(ss)-1)]) } moveLoadBenchSink = x } func BenchmarkMoveLoadTypViaValue(b *testing.B) { benchmarkMoveLoad(b, moveLoadBenchTypViaValue) } func BenchmarkMoveLoadTypViaPtr(b *testing.B) { benchmarkMoveLoad(b, moveLoadBenchTypViaPtr) }