aboutsummaryrefslogtreecommitdiff
path: root/test/fixedbugs/bug514.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/fixedbugs/bug514.go')
-rw-r--r--test/fixedbugs/bug514.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/fixedbugs/bug514.go b/test/fixedbugs/bug514.go
new file mode 100644
index 0000000000..3fb7f32a30
--- /dev/null
+++ b/test/fixedbugs/bug514.go
@@ -0,0 +1,55 @@
+// run
+
+// Copyright 2021 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.
+
+package main
+
+type iface interface {
+ Get() int
+}
+
+//go:notinheap
+type notInHeap struct {
+ i int
+}
+
+type myInt struct {
+ f *notInHeap
+}
+
+func (mi myInt) Get() int {
+ return int(mi.f.i)
+}
+
+type embed struct {
+ *myInt
+}
+
+var val = 1234
+
+var valNotInHeap = notInHeap{val}
+
+func main() {
+ i := val
+ check(i)
+ mi := myInt{f: &valNotInHeap}
+ check(mi.Get())
+ ifv := iface(mi)
+ check(ifv.Get())
+ ifv = iface(&mi)
+ check(ifv.Get())
+ em := embed{&mi}
+ check(em.Get())
+ ifv = em
+ check(ifv.Get())
+ ifv = &em
+ check(ifv.Get())
+}
+
+func check(v int) {
+ if v != val {
+ panic(v)
+ }
+}