util/codegen: treat unique.Handle as an opaque value type

It doesn't need a Clone method, like a time.Time, etc.

And then, because Go 1.23+ uses unique.Handle internally for
the netip package types, we can remove those special cases.

Updates #14058 (pulled out from that PR)
Updates tailscale/corp#24485

Change-Id: Iac3548a9417ccda5987f98e0305745a6e178b375
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2024-11-11 08:48:09 -08:00
committed by Brad Fitzpatrick
parent b9ecc50ce3
commit 00be1761b7
2 changed files with 32 additions and 3 deletions

View File

@@ -10,6 +10,8 @@ import (
"strings"
"sync"
"testing"
"time"
"unique"
"unsafe"
"golang.org/x/exp/constraints"
@@ -84,6 +86,16 @@ type PointerUnionParam[T netip.Prefix | BasicType | IntPtr] struct {
V T
}
type StructWithUniqueHandle struct{ _ unique.Handle[[32]byte] }
type StructWithTime struct{ _ time.Time }
type StructWithNetipTypes struct {
_ netip.Addr
_ netip.AddrPort
_ netip.Prefix
}
type Interface interface {
Method()
}
@@ -161,6 +173,18 @@ func TestGenericContainsPointers(t *testing.T) {
typ: "PointerUnionParam",
wantPointer: true,
},
{
typ: "StructWithUniqueHandle",
wantPointer: false,
},
{
typ: "StructWithTime",
wantPointer: false,
},
{
typ: "StructWithNetipTypes",
wantPointer: false,
},
}
for _, tt := range tests {