mirror of
https://github.com/golang/go
synced 2024-11-14 06:10:24 -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:
parent
88833c9045
commit
b73875ff6c
@ -1859,7 +1859,6 @@ var types2Failures = setOf(
|
|||||||
"fixedbugs/issue20233.go", // types2 reports two instead of one error (preference: 1.17 compiler)
|
"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/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/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(
|
var types2Failures32Bit = setOf(
|
||||||
|
@ -4,12 +4,15 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// 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
|
package p
|
||||||
|
|
||||||
//go:notinheap
|
import "runtime/cgo"
|
||||||
type nih struct{}
|
|
||||||
|
type nih struct{ _ cgo.Incomplete }
|
||||||
|
|
||||||
type embed4 map[nih]int // ERROR "incomplete \(or unallocatable\) map key not allowed"
|
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 {
|
type okay4 interface {
|
||||||
f(x nih) nih
|
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\)"
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user