go/test/fixedbugs/notinheap3.go
Cuong Manh Le f45c2d7e47 go/types,types2: move notinheap tests to fixedbugs directory
So they can be added to ignored list, since the tests now require
cgo.Incomplete, which is not recognized by go/types and types2.

Updates #46731

Change-Id: I9f24e3c8605424d1f5f42ae4409437198f4c1326
Reviewed-on: https://go-review.googlesource.com/c/go/+/427142
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
2022-09-02 17:46:15 +00:00

81 lines
1.3 KiB
Go

// errorcheck -+ -0 -l -d=wb
// Copyright 2016 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.
// Test write barrier elimination for notinheap.
//go:build cgo
package p
import "runtime/cgo"
type t1 struct {
x *nih
s []nih
y [1024]byte // Prevent write decomposition
}
type t2 struct {
x *ih
s []ih
y [1024]byte
}
type nih struct {
_ cgo.Incomplete
x uintptr
}
type ih struct { // In-heap type
x uintptr
}
var (
v1 t1
v2 t2
v1s []t1
v2s []t2
)
func f() {
// Test direct writes
v1.x = nil // no barrier
v2.x = nil // ERROR "write barrier"
v1.s = []nih(nil) // no barrier
v2.s = []ih(nil) // ERROR "write barrier"
}
func g() {
// Test aggregate writes
v1 = t1{x: nil} // no barrier
v2 = t2{x: nil} // ERROR "write barrier"
}
func h() {
// Test copies and appends.
copy(v1s, v1s[1:]) // no barrier
copy(v2s, v2s[1:]) // ERROR "write barrier"
_ = append(v1s, v1s...) // no barrier
_ = append(v2s, v2s...) // ERROR "write barrier"
}
// Slice clearing
var (
sliceIH []*ih
sliceNIH []*nih
)
func sliceClear() {
for i := range sliceIH {
sliceIH[i] = nil // ERROR "write barrier"
}
for i := range sliceNIH {
sliceNIH[i] = nil // no barrier
}
}