• 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
..
Makefile Loading commit data...
align.c Loading commit data...
array.c Loading commit data...
bisonerrors Loading commit data...
bits.c Loading commit data...
builtin.c Loading commit data...
bv.c Loading commit data...
closure.c Loading commit data...
const.c Loading commit data...
cplx.c Loading commit data...
dcl.c Loading commit data...
doc.go Loading commit data...
esc.c Loading commit data...
export.c Loading commit data...
fmt.c Loading commit data...
gen.c Loading commit data...
go.errors Loading commit data...
go.h Loading commit data...
go.y Loading commit data...
init.c Loading commit data...
inl.c Loading commit data...
lex.c Loading commit data...
md5.c Loading commit data...
md5.h Loading commit data...
mkbuiltin Loading commit data...
mkbuiltin1.c Loading commit data...
mkopnames Loading commit data...
mparith1.c Loading commit data...
mparith2.c Loading commit data...
mparith3.c Loading commit data...
obj.c Loading commit data...
order.c Loading commit data...
pgen.c Loading commit data...
plive.c Loading commit data...
popt.c Loading commit data...
popt.h Loading commit data...
racewalk.c Loading commit data...
range.c Loading commit data...
reflect.c Loading commit data...
runtime.go Loading commit data...
select.c Loading commit data...
sinit.c Loading commit data...
subr.c Loading commit data...
swt.c Loading commit data...
typecheck.c Loading commit data...
unsafe.c Loading commit data...
unsafe.go Loading commit data...
walk.c Loading commit data...
y.tab.c Loading commit data...
y.tab.h Loading commit data...
yerr.h Loading commit data...