1
0
mirror of https://github.com/golang/go synced 2024-11-13 13:20:39 -07:00

test: re-enabled fixedbugs/notinheap.go test

By using cgo.Incomplete to represent not-in-heap type.

While at it, also removing the type conversions tests, since they could
not be present without //go:notinheap pragma.

Fixes #54846

Change-Id: I5ee2a4b6498d4100c9770ed7bd62f52623e42526
Reviewed-on: https://go-review.googlesource.com/c/go/+/597536
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Keith Randall <khr@google.com>
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This commit is contained in:
Cuong Manh Le 2024-07-11 00:14:33 +07:00 committed by Gopher Robot
parent 88833c9045
commit b73875ff6c
2 changed files with 6 additions and 27 deletions

View File

@ -1859,7 +1859,6 @@ var types2Failures = setOf(
"fixedbugs/issue20233.go", // types2 reports two instead of one error (preference: 1.17 compiler)
"fixedbugs/issue20245.go", // types2 reports two instead of one error (preference: 1.17 compiler)
"fixedbugs/issue31053.go", // types2 reports "unknown field" instead of "cannot refer to unexported field"
"fixedbugs/notinheap.go", // types2 doesn't report errors about conversions that are invalid due to //go:notinheap
)
var types2Failures32Bit = setOf(

View File

@ -4,12 +4,15 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Test type-checking errors for go:notinheap.
// Test type-checking errors for not-in-heap types.
//go:build cgo
package p
//go:notinheap
type nih struct{}
import "runtime/cgo"
type nih struct{ _ cgo.Incomplete }
type embed4 map[nih]int // ERROR "incomplete \(or unallocatable\) map key not allowed"
@ -26,26 +29,3 @@ type okay3 func(x nih) nih
type okay4 interface {
f(x nih) nih
}
// Type conversions don't let you sneak past notinheap.
type t1 struct{ x int }
//go:notinheap
type t2 t1
//go:notinheap
type t3 byte
//go:notinheap
type t4 rune
var sink interface{}
func i() {
sink = new(t1) // no error
sink = (*t2)(new(t1)) // ERROR "cannot convert(.|\n)*t2 is incomplete \(or unallocatable\)"
sink = (*t2)(new(struct{ x int })) // ERROR "cannot convert(.|\n)*t2 is incomplete \(or unallocatable\)"
sink = []t3("foo") // ERROR "cannot convert(.|\n)*t3 is incomplete \(or unallocatable\)"
sink = []t4("bar") // ERROR "cannot convert(.|\n)*t4 is incomplete \(or unallocatable\)"
}