The first version of CL 340609 for gofrontend passed all existing tests,
but not this one.
For #42076
Change-Id: I6491e2f186091bdae140b7f7befa511806a6478a
Reviewed-on: https://go-review.googlesource.com/c/go/+/340950
Trust: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
--- /dev/null
+// 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)
+ }
+}