• Russ Cox's avatar
    cmd/gc: fix &result escaping into result · f20e4d5e
    Russ Cox authored
    There is a hierarchy of location defined by loop depth:
    
            -1 = the heap
            0 = function results
            1 = local variables (and parameters)
            2 = local variable declared inside a loop
            3 = local variable declared inside a loop inside a loop
            etc
    
    In general if an address from loopdepth n is assigned to
    something in loop depth m < n, that indicates an extended
    lifetime of some form that requires a heap allocation.
    
    Function results can be local variables too, though, and so
    they don't actually fit into the hierarchy very well.
    Treat the address of a function result as level 1 so that
    if it is written back into a result, the address is treated
    as escaping.
    
    Fixes #8185.
    
    LGTM=iant
    R=iant
    CC=golang-codereviews
    https://golang.org/cl/108870044
    f20e4d5e
Name
Last commit
Last update
..
5a Loading commit data...
5c Loading commit data...
5g Loading commit data...
5l Loading commit data...
6a Loading commit data...
6c Loading commit data...
6g Loading commit data...
6l Loading commit data...
8a Loading commit data...
8c Loading commit data...
8g Loading commit data...
8l Loading commit data...
addr2line Loading commit data...
api Loading commit data...
cc Loading commit data...
cgo Loading commit data...
dist Loading commit data...
fix Loading commit data...
gc Loading commit data...
go Loading commit data...
gofmt Loading commit data...
ld Loading commit data...
link Loading commit data...
nm Loading commit data...
objdump Loading commit data...
pack Loading commit data...
yacc Loading commit data...