Slightly more minimal, in my testing it seems that the call to 'nothing' is not needed.
I do not quite know why, but these two lines seem to show how the compiler is reasoning about this escape: escape.go:4:11: flow: {heap} = x: escape.go:4:11: from *y = x (assign) at escape.go:6:5 I do not know why it thinks assigning to '*y' is equivalent to assigning to the heap; later it even mentions that `new([]byte) does not escape`, and that is the definition of 'y'. Sorry I'm not more helpful, I looked into this a bit more myself and also came up without any good answers. On Wednesday, March 4, 2020 at 2:58:37 PM UTC-7, burns...@gmail.com wrote: > > Hi All, > > I am trying to debug why a byte slice is escaping in my program. I have a > small reproducible example here: > > % cat escape.go > package main > > func main() { > x := make([]byte, 5) > y := new([]byte) > *y = x > nothing((*y)[3]) > } > > func nothing(b byte) {} > % go tool compile -m -m -l escape.go > escape.go:4:11: make([]byte, 5) escapes to heap: > escape.go:4:11: flow: x = &{storage for make([]byte, 5)}: > escape.go:4:11: from make([]byte, 5) (spill) at escape.go:4:11 > escape.go:4:11: from x := make([]byte, 5) (assign) at escape.go:4:4 > escape.go:4:11: flow: {heap} = x: > escape.go:4:11: from *y = x (assign) at escape.go:6:5 > escape.go:4:11: make([]byte, 5) escapes to heap > escape.go:5:10: new([]byte) does not escape > > It seems to me like neither x nor it's backing array should escape, but > I'm having trouble figuring out why it's flagged as escaping from the debug > output. > > % go version > go version go1.14 darwin/amd64 > > > Any help would be appreciated. > > Ethan > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/a315ea46-f8ac-4a8f-bc43-c2b16367e72f%40googlegroups.com.