mirror of
https://github.com/golang/go
synced 2024-10-06 08:00:07 +00:00
cmd/compile: add case for ODOTTYPE to escwalk
ODOTTYPE should be treated a whole lot like ODOT, but it was missing completely from the switch in escwalk and thus escape status did not propagate to fields. Since interfaces are required to trigger this bug, the test was added to escape_iface.go. Fixes #11931. Change-Id: Id0383981cc4b1a160f6ad447192a112eed084538 Reviewed-on: https://go-review.googlesource.com/12921 Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Dmitry Vyukov <dvyukov@google.com> Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
0bd8de1048
commit
6f6bcadc17
|
@ -1735,6 +1735,7 @@ func escwalk(e *EscState, level Level, dst *Node, src *Node) {
|
|||
}
|
||||
|
||||
case ODOT,
|
||||
ODOTTYPE,
|
||||
OSLICE,
|
||||
OSLICEARR,
|
||||
OSLICE3,
|
||||
|
|
|
@ -209,3 +209,19 @@ func efaceEscape2() {
|
|||
mdoesnotescape(x)
|
||||
}
|
||||
}
|
||||
|
||||
type T1 struct {
|
||||
p *int
|
||||
}
|
||||
|
||||
type T2 struct {
|
||||
T1 T1
|
||||
}
|
||||
|
||||
func dotTypeEscape() *T2 { // #11931
|
||||
var x interface{}
|
||||
x = &T1{p: new(int)} // ERROR "new\(int\) escapes to heap" "&T1 literal does not escape"
|
||||
return &T2{
|
||||
T1: *(x.(*T1)), // ERROR "&T2 literal escapes to heap"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue