mirror of
https://github.com/goplus/llgo.git
synced 2025-09-26 19:51:21 +08:00
39 lines
634 B
Go
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)
|
|
}
|