| // Copyright 2021 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 a | |
| type Value[T any] struct { | |
| val T | |
| } | |
| // The noinline directive should survive across import, and prevent instantiations | |
| // of these functions from being inlined. | |
| //go:noinline | |
| func Get[T any](v *Value[T]) T { | |
| return v.val | |
| } | |
| //go:noinline | |
| func Set[T any](v *Value[T], val T) { | |
| v.val = val | |
| } | |
| //go:noinline | |
| func (v *Value[T]) Set(val T) { | |
| v.val = val | |
| } | |
| //go:noinline | |
| func (v *Value[T]) Get() T { | |
| return v.val | |
| } |