1
0
mirror of https://github.com/golang/go synced 2024-07-05 09:50:19 +00:00

test: use cgo.Incomplete instead of go:notinheap for "run" tests

Same as CL 421880, but for test directory.

Updates #46731

Change-Id: If8d18df013a6833adcbd40acc1a721bbc23ca6b2
Reviewed-on: https://go-review.googlesource.com/c/go/+/421881
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Keith Randall <khr@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Cuong Manh Le 2022-08-08 00:14:43 +07:00
parent ca634fa2c5
commit 64b260dbde
6 changed files with 39 additions and 15 deletions

View File

@ -4,14 +4,18 @@
// 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 "runtime/cgo"
type iface interface {
Get() int
}
//go:notinheap
type notInHeap struct {
_ cgo.Incomplete
i int
}
@ -29,7 +33,7 @@ type embed struct {
var val = 1234
var valNotInHeap = notInHeap{val}
var valNotInHeap = notInHeap{i: val}
func main() {
i := val

View File

@ -4,24 +4,29 @@
// 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 (
"runtime/cgo"
"unsafe"
)
//go:notinheap
type S struct{ x int }
type S struct {
_ cgo.Incomplete
x int
}
func main() {
var i int
p := (*S)(unsafe.Pointer(uintptr(unsafe.Pointer(&i))))
v := uintptr(unsafe.Pointer(p))
// p is a pointer to a go:notinheap type. Like some C libraries,
// p is a pointer to a not-in-heap type. Like some C libraries,
// we stored an integer in that pointer. That integer just happens
// to be the address of i.
// v is also the address of i.
// p has a base type which is marked go:notinheap, so it
// p has a base type which is marked not-in-heap, so it
// should not be adjusted when the stack is copied.
recurse(100, p, v)
}

View File

@ -4,10 +4,14 @@
// source code is governed by a BSD-style license that can be found in
// the LICENSE file.
//go:build cgo
package main
//go:notinheap
import "runtime/cgo"
type NIH struct {
_ cgo.Incomplete
}
type T struct {

View File

@ -4,12 +4,17 @@
// source code is governed by a BSD-style license that can be found in
// the LICENSE file.
//go:build cgo
package main
import "reflect"
import (
"reflect"
"runtime/cgo"
)
//go:notinheap
type NIH struct {
_ cgo.Incomplete
}
var x, y NIH

View File

@ -1,6 +1,6 @@
// run
//go:build goexperiment.unified
// +build goexperiment.unified
//go:build goexperiment.unified && cgo
// +build goexperiment.unified,cgo
// TODO(mdempsky): Enable test unconditionally. This test should pass
// for non-unified mode too.
@ -11,8 +11,12 @@
package main
//go:notinheap
type A struct{ B }
import "runtime/cgo"
type A struct {
B
_ cgo.Incomplete
}
type B struct{ x byte }
type I interface{ M() *B }

View File

@ -4,15 +4,17 @@
// 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"
)
//go:notinheap
type S struct{}
type S struct{ _ cgo.Incomplete }
func main() {
p := (*S)(unsafe.Pointer(uintptr(0x8000)))