• Matthew Dempsky's avatar
    cmd/compile: fix miscompilation of "defer delete(m, k)" · 2c0c68d6
    Matthew Dempsky authored
    Previously, for slow map key types (i.e., any type other than a 32-bit
    or 64-bit plain memory type), we would rewrite
    
        defer delete(m, k)
    
    into
    
        ktmp := k
        defer delete(m, &ktmp)
    
    However, if the defer statement was inside a loop, we would end up
    reusing the same ktmp value for all of the deferred deletes.
    
    We already rewrite
    
        defer print(x, y, z)
    
    into
    
        defer func(a1, a2, a3) {
            print(a1, a2, a3)
        }(x, y, z)
    
    This CL generalizes this rewrite to also apply for slow map deletes.
    
    This could be extended to apply even more generally to other builtins,
    but as discussed on #24259, there are cases where we must *not* do
    this (e.g., "defer recover()"). However, if we elect to do this more
    generally, this CL should still make that easier.
    
    Lastly, while here, fix a few isues in wrapCall (nee walkprintfunc):
    
    1) lookupN appends the generation number to the symbol anyway, so "%d"
    was being literally included in the generated function names.
    
    2) walkstmt will be called when the function is compiled later anyway,
    so no need to do it now.
    
    Fixes #24259.
    
    Change-Id: I70286867c64c69c18e9552f69e3f4154a0fc8b04
    Reviewed-on: https://go-review.googlesource.com/99017
    Run-TryBot: Matthew Dempsky <mdempsky@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    2c0c68d6
Name
Last commit
Last update
.github Loading commit data...
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...