1// run
2
3// Copyright 2022 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7//go:build cgo
8
9package main
10
11import (
12	"log"
13	"runtime/cgo"
14	"unsafe"
15)
16
17type S struct{ _ cgo.Incomplete }
18
19func main() {
20	p := (*S)(unsafe.Pointer(uintptr(0x8000)))
21	var v any = p
22	p2 := v.(*S)
23	if p != p2 {
24		log.Fatalf("%p != %p", unsafe.Pointer(p), unsafe.Pointer(p2))
25	}
26	p2 = typeAssert[*S](v)
27	if p != p2 {
28		log.Fatalf("%p != %p from typeAssert", unsafe.Pointer(p), unsafe.Pointer(p2))
29	}
30}
31
32func typeAssert[T any](v any) T {
33	return v.(T)
34}
35