blob: 933c3e868c0545c81635ed438352ae571b359976 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
// run
// Copyright 2022 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.
//go:build cgo
package main
import (
"log"
"runtime/cgo"
"unsafe"
)
type S struct{ _ cgo.Incomplete }
func main() {
p := (*S)(unsafe.Pointer(uintptr(0x8000)))
var v any = p
p2 := v.(*S)
if p != p2 {
log.Fatalf("%p != %p", unsafe.Pointer(p), unsafe.Pointer(p2))
}
p2 = typeAssert[*S](v)
if p != p2 {
log.Fatalf("%p != %p from typeAssert", unsafe.Pointer(p), unsafe.Pointer(p2))
}
}
func typeAssert[T any](v any) T {
return v.(T)
}
|