aboutsummaryrefslogtreecommitdiff
path: root/src/weak/pointer.go
diff options
context:
space:
mode:
authorthepudds <thepudds1460@gmail.com>2025-02-06 08:07:38 -0500
committerGopher Robot <gobot@golang.org>2025-02-06 13:16:59 -0800
commit8163ea1458763aa38fa9197e479bd30cb0145429 (patch)
treee4191d199aef072217af0bdeb64d76cf52ca899e /src/weak/pointer.go
parent478ad013f90fe1dbb199d22f41b93c920ae0d5e9 (diff)
downloadgo-8163ea1458763aa38fa9197e479bd30cb0145429.tar.xz
weak: prevent unsafe conversions using weak pointers
Prevent conversions between Pointer types, like we do for sync/atomic.Pointer. Fixes #71583 Change-Id: I20e83106d8a27996f221e6cd9d52637b0442cea4 Reviewed-on: https://go-review.googlesource.com/c/go/+/647195 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Michael Knyszek <mknyszek@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'src/weak/pointer.go')
-rw-r--r--src/weak/pointer.go5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/weak/pointer.go b/src/weak/pointer.go
index 39c512e76d..e9d7420880 100644
--- a/src/weak/pointer.go
+++ b/src/weak/pointer.go
@@ -56,6 +56,9 @@ import (
// referenced object. Typically, this batching only happens for tiny
// (on the order of 16 bytes or less) and pointer-free objects.
type Pointer[T any] struct {
+ // Mention T in the type definition to prevent conversions
+ // between Pointer types, like we do for sync/atomic.Pointer.
+ _ [0]*T
u unsafe.Pointer
}
@@ -69,7 +72,7 @@ func Make[T any](ptr *T) Pointer[T] {
u = runtime_registerWeakPointer(unsafe.Pointer(ptr))
}
runtime.KeepAlive(ptr)
- return Pointer[T]{u}
+ return Pointer[T]{u: u}
}
// Value returns the original pointer used to create the weak pointer.