• Matthew Dempsky's avatar
    cmd/compile: fix stack frame info for calls in receiver slot · 7c8a9615
    Matthew Dempsky authored
    Previously, after inlining a call, we made a second pass to rewrite
    the AST's position information to record the inlined stack frame. The
    call arguments were part of this AST, but it would be incorrect to
    rewrite them too, so extra effort was made to temporarily remove them
    while the position rewriting was done.
    
    However, this extra logic was only done for regular arguments: it was
    not done for receiver arguments. Consequently if m was inlined in
    "f().m(g(), h())", g and h would have correct call frames, but f would
    appear to be called by m.
    
    The fix taken by this CL is to merge setpos into inlsubst and only
    rewrite position information for nodes that were actually copied from
    the original function AST body. As a side benefit, this eliminates an
    extra AST pass and some AST walking code.
    
    Fixes #21879.
    
    Change-Id: I22b25c208313fc25c358d3a2eebfc9b012400084
    Reviewed-on: https://go-review.googlesource.com/64470
    Run-TryBot: Matthew Dempsky <mdempsky@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
    7c8a9615
Name
Last commit
Last update
..
addr2line Loading commit data...
api Loading commit data...
asm Loading commit data...
cgo Loading commit data...
compile Loading commit data...
cover Loading commit data...
dist Loading commit data...
doc Loading commit data...
fix Loading commit data...
go Loading commit data...
gofmt Loading commit data...
internal Loading commit data...
link Loading commit data...
nm Loading commit data...
objdump Loading commit data...
pack Loading commit data...
pprof Loading commit data...
trace Loading commit data...
vendor Loading commit data...
vet Loading commit data...