aboutsummaryrefslogtreecommitdiff
path: root/test/notinheap2.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/notinheap2.go')
-rw-r--r--test/notinheap2.go40
1 files changed, 35 insertions, 5 deletions
diff --git a/test/notinheap2.go b/test/notinheap2.go
index de1e6db1d3..100ed37b72 100644
--- a/test/notinheap2.go
+++ b/test/notinheap2.go
@@ -20,23 +20,53 @@ var x nih
// Stack variables are not okay.
func f() {
- var y nih // ERROR "nih is go:notinheap; stack allocation disallowed"
+ var y nih // ERROR "nih is incomplete \(or unallocatable\); stack allocation disallowed"
x = y
}
// Heap allocation is not okay.
var y *nih
+var y2 *struct{ x nih }
+var y3 *[1]nih
var z []nih
var w []nih
var n int
+var sink interface{}
+
+type embed1 struct { // implicitly notinheap
+ x nih
+}
+
+type embed2 [1]nih // implicitly notinheap
+
+type embed3 struct { // implicitly notinheap
+ x [1]nih
+}
+
+// Type aliases inherit the go:notinheap-ness of the type they alias.
+type nihAlias = nih
+
+type embedAlias1 struct { // implicitly notinheap
+ x nihAlias
+}
+type embedAlias2 [1]nihAlias // implicitly notinheap
func g() {
- y = new(nih) // ERROR "heap allocation disallowed"
- z = make([]nih, 1) // ERROR "heap allocation disallowed"
- z = append(z, x) // ERROR "heap allocation disallowed"
+ y = new(nih) // ERROR "can't be allocated in Go"
+ y2 = new(struct{ x nih }) // ERROR "can't be allocated in Go"
+ y3 = new([1]nih) // ERROR "can't be allocated in Go"
+ z = make([]nih, 1) // ERROR "can't be allocated in Go"
+ z = append(z, x) // ERROR "can't be allocated in Go"
+
+ sink = new(embed1) // ERROR "can't be allocated in Go"
+ sink = new(embed2) // ERROR "can't be allocated in Go"
+ sink = new(embed3) // ERROR "can't be allocated in Go"
+ sink = new(embedAlias1) // ERROR "can't be allocated in Go"
+ sink = new(embedAlias2) // ERROR "can't be allocated in Go"
+
// Test for special case of OMAKESLICECOPY
- x := make([]nih, n) // ERROR "heap allocation disallowed"
+ x := make([]nih, n) // ERROR "can't be allocated in Go"
copy(x, z)
z = x
}