Thanks for looking into it and simplifying the example!

Just to explain, I added the call to nothing(), because I was worried that
otherwise the result would be recognized as unused and the entire code
would be optimized away. Good to know it's not relevant to reproduce.
Thanks again.

On Wed, Mar 4, 2020, 18:45 'Kevin Chowski' via golang-nuts <
golang-nuts@googlegroups.com> wrote:

> 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 a topic in the
> Google Groups "golang-nuts" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/golang-nuts/2s0_gQjR7yE/unsubscribe.
> To unsubscribe from this group and all its topics, 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
> <https://groups.google.com/d/msgid/golang-nuts/a315ea46-f8ac-4a8f-bc43-c2b16367e72f%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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/CAGE%3DEi2AhqUE%3DyjX57472VTXco2JcuHAjZ4CskvNDdk-04_XeA%40mail.gmail.com.

Reply via email to