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/4150346f-5b2f-4dab-852f-5b61315921ff%40googlegroups.com.

Reply via email to