blob: c1b594d82fdf7194cdc312cf55250d21d1bdf2d0 [file]
// run
// Copyright 2026 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 (
"reflect"
"runtime/cgo"
)
type E struct {
x int
}
func (e *E) M() int {
return e.x
}
type T struct {
E
}
type NotInHeapT struct {
E
_ cgo.Incomplete
}
var (
x = struct {
E
_ cgo.Incomplete
}{E: E{x: 7}}
tFn = (*T).M
notInHeapTFn = (*NotInHeapT).M
)
type I interface {
M() int
}
//go:noinline
func call(i I) int {
return i.M()
}
func main() {
if got := call(&x); got != 7 {
panic(got)
}
if reflect.ValueOf(tFn).Pointer() == reflect.ValueOf(notInHeapTFn).Pointer() {
panic("pointer and scalar receiver wrappers were shared")
}
}