• Austin Clements's avatar
    cmd/compile: make HasHeapPointer recursive · 316e3036
    Austin Clements authored
    Currently (*Type).HasHeapPointer only ignores pointers go:notinheap
    types if the type itself is a pointer to a go:notinheap type. However,
    if it's some other type that contains pointers where all of those
    pointers are go:notinheap, it will conservatively return true. As a
    result, we'll use write barriers where they aren't needed, for example
    calling typedmemmove instead of just memmove on structs that contain
    only go:notinheap pointers.
    
    Fix this by making HasHeapPointer walk the whole type looking for
    pointers that aren't marked go:notinheap.
    
    Change-Id: Ib8c6abf6f7a20f34969d1d402c5498e0b990be59
    Reviewed-on: https://go-review.googlesource.com/73412
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
    316e3036
notinheap3.go 694 Bytes