Files
llgo/cl/_testrt/tpunsafe/in.go
2025-09-18 21:16:06 +08:00

39 lines
634 B
Go

package main
import (
"unsafe"
)
type N[T any] struct {
n1 T
n2 T
}
type M[T any] struct {
m0 T
m1 int32
m2 N[T]
}
func (m *M[T]) check(align, offset1, offset2 uintptr) {
if v := unsafe.Alignof(m.m2); v != align {
println("have", v, "want", align)
panic("unsafe.Alignof error")
}
if v := unsafe.Offsetof(m.m2); v != offset1 {
println("have", v, "want", offset1)
panic("unsafe.Offsetof error")
}
if v := unsafe.Offsetof(m.m2.n2); v != offset2 {
println("have", v, "want", offset2)
panic("unsafe.Offsetof error")
}
}
func main() {
m1 := M[bool]{}
m1.check(1, 8, 1)
m2 := M[int64]{}
m2.check(8, 16, 8)
}